{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 音乐网站用户流失预测 -- 数据探索&特征工程1\n",
    "\n",
    "### 数据集说明\n",
    "\n",
    "项目提供KKBOX用户——歌曲重复播放记录，以及用户和歌曲的元数据。训练数据由2017年2月服务到期的用户构成，target标签代表用户在2017年3月是否续订了业务。测试集中的数据由2017年3月内将到期的用户构成，需要预测用户是否在到期后的一个月内即2017年4月预定、流失的概率。\n",
    "\n",
    "以下是文件及字段说明：\n",
    "\n",
    "1. train.csv: 训练数据，共7,377,418条记录 \n",
    "\n",
    "    msno: 用户id，加密String\n",
    "\n",
    "    song_id: song id，歌曲id\n",
    "\n",
    "    source_system_tab: 触发事件的类型/tab，用于表示app的功能类型\n",
    "\n",
    "    source_screen_name: 用户看到的布局的名字（name of the layout）\n",
    "\n",
    "    source_type: 用户在app上播放音乐的入口的类型\n",
    "\n",
    "    target: 标签。1表示用户在第一次听音乐后会在一个月内继续订阅，0表示没有订阅。\n",
    "\n",
    "2. test.csv ：测试数据，共2,556,790条记录 \n",
    "\n",
    "    id: id (用于结果提交)\n",
    "\n",
    "    msno: 用户id\n",
    "\n",
    "    song_id: 歌曲id\n",
    "\n",
    "    source_system_tab: 触发事件的类型/tab，用于表示app的功能类型\n",
    "\n",
    "    source_screen_name: 用户看到的布局的名字（name of the layout）\n",
    "\n",
    "    source_type: 用户在app上播放音乐的入口的类型\n",
    "\n",
    "3. sampleSubmission.csv：提交结果文件样例 \n",
    "\n",
    "    提交测试结果包含两个字段，分别为测试样本id及其标签为1的概率，格式如下：\n",
    "\n",
    "    id,target\n",
    "    \n",
    "    2,0.3\n",
    "    \n",
    "    5,0.1\n",
    "    \n",
    "    6,1\n",
    "    \n",
    "    etc.\n",
    "\n",
    "4. songs.csv：歌曲元数据信息，用unicode编码 \n",
    "\n",
    "    song_id：歌曲id\n",
    "\n",
    "    song_length: 单位为ms\n",
    "\n",
    "    genre_ids: genre 类别. 可多选，用 “|“隔开\n",
    "\n",
    "    artist_name：歌手\n",
    "\n",
    "    composer：作曲\n",
    "\n",
    "    lyricist：作词\n",
    "\n",
    "    language：语言\n",
    "\n",
    "5. members.csv：用户元数据信息\n",
    "\n",
    "    msno：用户id\n",
    "\n",
    "    city：城市\n",
    "\n",
    "    bd: 年龄。注意：年龄数据有离群点\n",
    "\n",
    "    gender：性别\n",
    "\n",
    "    registered_via: 注册方式\n",
    "\n",
    "    registration_init_time: 注册时间，格式为%Y%m%d\n",
    "\n",
    "    expiration_date: 到期时间，格式为 %Y%m%d\n",
    "\n",
    "6. song_extra_infos.csv：歌曲额外的信息\n",
    "\n",
    "    song_id：歌曲id\n",
    "\n",
    "    song name ：歌曲名字\n",
    "\n",
    "    isrc – 国际标准音像制品编码(International Standard Recording Code )。理论上可用于歌曲id，但产生的ISR没有经过官方授权。因此ISRC中的信息，如国家代码和参考年份可能不正确。且多首歌曲可能共享共一个ISRC，因为一首歌曲的音像制可发行多次。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 导入工具包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "# 要注意的是一旦导入了seaborn，matplotlib的默认作图风格就会被覆盖成seaborn的格式\n",
    "import seaborn as sns\n",
    "\n",
    "# 矩阵完整显示\n",
    "np.set_printoptions(threshold=np.inf)\n",
    "%matplotlib inline\n",
    "\n",
    "dpath = '../data/'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "LGBM_data\n",
      "LR_data\n",
      "members.csv\n",
      "members_copy.csv\n",
      "sample_submission.csv\n",
      "song_extra_info.csv\n",
      "songs.csv\n",
      "test.csv\n",
      "train.csv\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from subprocess import check_output\n",
    "print(check_output([\"ls\", dpath]).decode(\"utf8\"))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 数据探索（EDA）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1、Members"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>msno</th>\n",
       "      <th>city</th>\n",
       "      <th>bd</th>\n",
       "      <th>gender</th>\n",
       "      <th>registered_via</th>\n",
       "      <th>registration_init_time</th>\n",
       "      <th>expiration_date</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>XQxgAYj3klVKjR3oxPPXYYFp4soD4TuBghkhMTD4oTw=</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>7</td>\n",
       "      <td>2011-08-20</td>\n",
       "      <td>2017-09-20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>UizsfmJb9mV54qE9hCYyU07Va97c0lCRLEQX3ae+ztM=</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>7</td>\n",
       "      <td>2015-06-28</td>\n",
       "      <td>2017-06-22</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>D8nEhsIOBSoE6VthTaqDX8U6lqjJ7dLdr72mOyLya2A=</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>4</td>\n",
       "      <td>2016-04-11</td>\n",
       "      <td>2017-07-12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>mCuD+tZ1hERA/o5GPqk38e041J8ZsBaLcu7nGoIIvhI=</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>9</td>\n",
       "      <td>2015-09-06</td>\n",
       "      <td>2015-09-07</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>q4HRBfVSssAFS9iRfxWrohxuk9kCYMKjHOEagUMV6rQ=</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>4</td>\n",
       "      <td>2017-01-26</td>\n",
       "      <td>2017-06-13</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                           msno city  bd gender  \\\n",
       "0  XQxgAYj3klVKjR3oxPPXYYFp4soD4TuBghkhMTD4oTw=    1   0    NaN   \n",
       "1  UizsfmJb9mV54qE9hCYyU07Va97c0lCRLEQX3ae+ztM=    1   0    NaN   \n",
       "2  D8nEhsIOBSoE6VthTaqDX8U6lqjJ7dLdr72mOyLya2A=    1   0    NaN   \n",
       "3  mCuD+tZ1hERA/o5GPqk38e041J8ZsBaLcu7nGoIIvhI=    1   0    NaN   \n",
       "4  q4HRBfVSssAFS9iRfxWrohxuk9kCYMKjHOEagUMV6rQ=    1   0    NaN   \n",
       "\n",
       "  registered_via registration_init_time expiration_date  \n",
       "0              7             2011-08-20      2017-09-20  \n",
       "1              7             2015-06-28      2017-06-22  \n",
       "2              4             2016-04-11      2017-07-12  \n",
       "3              9             2015-09-06      2015-09-07  \n",
       "4              4             2017-01-26      2017-06-13  "
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "(34403, 7)"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n",
    "members = pd.read_csv(dpath + 'members.csv', dtype={'city' : 'category',\n",
    "                                                    'bd' : np.uint8,\n",
    "                                                    'gender' : 'category',\n",
    "                                                    'registered_via' : 'category'},\n",
    "                     parse_dates=['registration_init_time','expiration_date'])\n",
    "members.head()\n",
    "members.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 查看Members数据缺失情况"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "msno                          0\n",
       "city                          0\n",
       "bd                            0\n",
       "gender                    19902\n",
       "registered_via                0\n",
       "registration_init_time        0\n",
       "expiration_date               0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "members.isnull().sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 查看Members类别特征分布情况"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "city属性有21种不同取值，各取值及其出现的次数\n",
      "\n",
      "1     19445\n",
      "13     3395\n",
      "5      2634\n",
      "4      1732\n",
      "15     1525\n",
      "22     1467\n",
      "6       913\n",
      "14      708\n",
      "12      491\n",
      "9       309\n",
      "8       289\n",
      "11      285\n",
      "18      259\n",
      "10      216\n",
      "21      213\n",
      "3       204\n",
      "17      152\n",
      "7        93\n",
      "16       35\n",
      "20       27\n",
      "19       11\n",
      "Name: city, dtype: int64\n",
      "\n",
      "bd属性有94种不同取值，各取值及其出现的次数\n",
      "\n",
      "0      19932\n",
      "27       751\n",
      "22       751\n",
      "24       740\n",
      "26       719\n",
      "25       716\n",
      "23       712\n",
      "28       688\n",
      "21       685\n",
      "29       661\n",
      "20       631\n",
      "30       602\n",
      "19       507\n",
      "31       491\n",
      "32       466\n",
      "18       466\n",
      "33       416\n",
      "34       404\n",
      "17       398\n",
      "35       380\n",
      "36       341\n",
      "37       300\n",
      "38       294\n",
      "39       226\n",
      "16       215\n",
      "40       204\n",
      "41       194\n",
      "44       138\n",
      "42       131\n",
      "43       121\n",
      "       ...  \n",
      "5          2\n",
      "102        2\n",
      "96         1\n",
      "97         1\n",
      "2          1\n",
      "163        1\n",
      "131        1\n",
      "3          1\n",
      "101        1\n",
      "95         1\n",
      "6          1\n",
      "70         1\n",
      "93         1\n",
      "218        1\n",
      "90         1\n",
      "89         1\n",
      "87         1\n",
      "213        1\n",
      "85         1\n",
      "82         1\n",
      "144        1\n",
      "76         1\n",
      "12         1\n",
      "107        1\n",
      "11         1\n",
      "106        1\n",
      "10         1\n",
      "103        1\n",
      "7          1\n",
      "78         1\n",
      "Name: bd, Length: 94, dtype: int64\n",
      "\n",
      "gender属性有3种不同取值，各取值及其出现的次数\n",
      "\n",
      "male      7405\n",
      "female    7096\n",
      "Name: gender, dtype: int64\n",
      "\n",
      "registered_via属性有6种不同取值，各取值及其出现的次数\n",
      "\n",
      "4     11392\n",
      "7      9433\n",
      "9      8628\n",
      "3      4879\n",
      "13       70\n",
      "16        1\n",
      "Name: registered_via, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "cat_features = ['city','bd','gender','registered_via']\n",
    "for col in cat_features:\n",
    "    num_vlaules = len(members[col].unique())\n",
    "    print('\\n%s属性有%d种不同取值，各取值及其出现的次数\\n'% (col, num_vlaules))\n",
    "    print(members[col].value_counts())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### bd（年龄）特征分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x1267bbdd8>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "(array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,\n",
       "        17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,\n",
       "        34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,\n",
       "        51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,\n",
       "        68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,\n",
       "        85, 86, 87, 88, 89, 90, 91, 92, 93]),\n",
       " <a list of 94 Text xticklabel objects>)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "f,axarray = plt.subplots(1,1,figsize=(15,10))\n",
    "agehist = members.groupby(['bd'],as_index=False).count()\n",
    "sns.barplot(x=agehist['bd'],y=agehist['gender'])\n",
    "# x轴坐标刻度值旋转90度\n",
    "plt.xticks(rotation=90)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**有年龄大于1000的值也有年龄小于等于0的值这些都是数据字典中描述的离群点。**\n",
    "**有19932条记录，年龄为0。这可能是异常值，也可能是缺失的值。**\n",
    "**绘制年龄在1-100岁之间的图表，以显示真实的分布。**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1, 100)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "(0, 800)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "<BarContainer object of 94 artists>"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "f,axarray = plt.subplots(1,1,figsize=(15,10))\n",
    "agehist = members.groupby(['bd'],as_index=False).count()\n",
    "# 只取年龄在[1,100]之间的较真实数据\n",
    "plt.xlim([1,100])\n",
    "plt.ylim([0,800])\n",
    "plt.bar(agehist['bd'],agehist['msno'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**年龄符合正态分布**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### city（城市）特征分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(-0.30000000000000004, 19555.0, '19445')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(0.7, 326.0, '216')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(1.7000000000000002, 395.0, '285')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(2.7, 601.0, '491')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(3.7, 3505.0, '3395')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(4.699999999999999, 818.0, '708')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(5.699999999999999, 1635.0, '1525')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(6.699999999999999, 145.0, '35')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(7.699999999999999, 262.0, '152')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(8.7, 369.0, '259')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(9.7, 121.0, '11')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(10.7, 137.0, '27')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(11.7, 323.0, '213')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(12.7, 1577.0, '1467')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(13.7, 314.0, '204')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(14.7, 1842.0, '1732')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(15.7, 2744.0, '2634')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(16.700000000000003, 1023.0, '913')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(17.700000000000003, 203.0, '93')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(18.700000000000003, 399.0, '289')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(19.700000000000003, 419.0, '309')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA4gAAAJNCAYAAABz4lt9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzdebRfdX3v/9c7iWAFuUIzGBIxlCJkgBySXIKrLYKIQBUx0CqoEBnEibuuOOKt60JtLThwC14Zaq8oOKGWKVVEKIiiv0II5QBBpiBQQlNmClSmhM/vj+wcD5DQGDjnG5LHY62zzve8997fvbfLP/Jk7+/+VmstAAAAMKLXBwAAAMDaQSACAACQRCACAADQEYgAAAAkEYgAAAB0BCIAAABJklG9PoDhNnr06DZp0qReHwYAAEBPXHXVVfe11sasbNl6F4iTJk3KggULen0YAAAAPVFVd6xqmVtMAQAASCIQAQAA6AhEAAAAkghEAAAAOgIRAACAJEMYiFX1mqr6aVX9qqqur6r/2c03q6qLquqW7vem3byq6stVtaiqrq2qGYPea263/i1VNXfQfGZVXddt8+WqqqE6HwAAgHXdUF5BXJrkY621KUl2SvLhqpqS5KgkF7fWtk5ycfd3kuyVZOvu5/AkpyTLgzLJ0UlmJ9kxydErorJb532DtttzCM8HAABgnTZkgdhaW9Ja+5fu9SNJbkgyIck+SU7vVjs9ydu71/skOaMtd3mSV1XV+CR7JLmotfZAa+3BJBcl2bNbtklr7fLWWktyxqD3AgAA4Hc0LJ9BrKpJSXZIckWSca21Jd2if08yrns9IcmdgzZb3M2eb754JXMAAADWwJAHYlVtnOSsJB9prT08eFl35a8NwzEcXlULqmrBvffeO9S7AwAAeEka0kCsqpdleRx+u7V2dje+u7s9NN3ve7r5XUleM2jzid3s+eYTVzJ/jtbaV1trs1prs8aMGfPCTgoAAGAdNZRPMa0kX0tyQ2vt/wxaNC/JiieRzk1y3qD5Qd3TTHdK8h/drag/SfLmqtq0ezjNm5P8pFv2cFXt1O3roEHvBQAAwO9o1BC+9x8lOTDJdVXV383+V5Ljkny/qg5NckeSd3TLzk/yp0kWJflNkoOTpLX2QFX9VZIru/U+21p7oHv9oSTfSPJ7SX7c/QAAALAGhvIppr9orVVrbfvWWl/3c35r7f7W2m6tta1ba29aEXvd00s/3FrbqrW2XWttwaD3Oq219ofdz9cHzRe01qZ12xzRfabxBTvkkEMyduzYTJs2bWB2zTXX5PWvf32222677L333nn44Wd8nDL/+q//mo033jhf+tKXnjFftmxZdthhh7z1rW8dmL33ve/Nlltumb6+vvT19aW/vz8AAAC9NixPMX2pee9735sLLrjgGbPDDjssxx13XK677rrMmTMnX/ziF5+x/KMf/Wj22muv57zXiSeemMmTJz9n/sUvfjH9/f3p7+9PX1/fi3sCAAAAa0AgrsTOO++czTbb7Bmzm2++OTvvvHOSZPfdd89ZZ501sOzcc8/NlltumalTpz5jm8WLF+dHP/pRDjvssKE/aAAAgBdIIK6mqVOn5rzzlj8D5wc/+EHuvHP5VzM++uij+fznP5+jjz76Odt85CMfyRe+8IWMGPHc/5n/4i/+Ittvv32OPPLIPPHEE0N78AAAAKtBIK6m0047LSeffHJmzpyZRx55JBtssEGS5JhjjsmRRx6ZjTfe+Bnr//CHP8zYsWMzc+bM57zXsccemxtvvDFXXnllHnjggXz+858flnMAAAB4PkP5FNN1yrbbbpsLL7wwyfLbTX/0ox8lSa644or8wz/8Qz75yU/moYceyogRI/Lyl788d911V+bNm5fzzz8/jz/+eB5++OG85z3vybe+9a2MHz8+SbLhhhvm4IMPfs6DbQAAAHpBIK6me+65J2PHjs3TTz+dv/7rv84HPvCBJMlll102sM4xxxyTjTfeOEcccUSS5VcKk+TSSy/Nl770pXzrW99KkixZsiTjx49Pay3nnnvuM56WCgAA0CsCcSUOOOCAXHrppbnvvvsyceLE/OVf/mUeffTRnHTSSUmSfffdNwcffPAav/+73/3u3HvvvWmtpa+vL6eeeuqLdegAAABrrF6krw58yZg1a1ZbsGDBf70iAADAOqiqrmqtzVrZMg+pAQAAIIlABAAAoLPefwbx3lO+1dP9j/nge3q6fwAAgBVcQQQAACCJQAQAAKAjEAEAAEgiEAEAAOgIRAAAAJIIRAAAADoCEQAAgCQCEQAAgI5ABAAAIIlABAAAoCMQAQAASCIQAQAA6AhEAAAAkghEAAAAOgIRAACAJAIRAACAjkAEAAAgiUAEAACgIxAB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zPTp0zN16tQcffTRSZJDDz0006dPz/bbb58/+7M/y6OPPpokueOOO7Lbbrtl++23zy677JLFixcPvNfIkSPT19eXvr6+vO1tb+vJ+QAA8NIiEGEtsuGGG+aSSy7JNddck/7+/lxwwQW5/PLL87d/+7e55pprcu2112aLLbbIV77ylSTJxz/+8Rx00EG59tpr87//9//Opz/96YH3+r3f+7309/env78/8+bN69UpAQDwEiIQYS1SVdl4442TJE899VSeeuqpVFU22WSTJElrLY899liqKknyq1/9Km984xuTJLvuumvOO++83hw4AADrBIEIa5lly5alr68vY8eOze67757Zs2cnSQ4++OC8+tWvzo033pj/8T/+R5Jk+vTpOfvss5Mk55xzTh555JHcf//9SZbfrjpr1qzstNNOOffcc3tzMgAAvKQIRFjLjBw5Mv39/Vm8eHHmz5+fhQsXJkm+/vWv59/+7d8yefLkfO9730uSfOlLX8rPfvaz7LDDDvnZz36WCRMmZOTIkUmWfz5xwYIF+c53vpOPfOQjufXWW3t2TgAAvDQIRFhLvepVr8quu+6aCy64YGA2cuTI7L///jnrrLOSJJtvvnnOPvvsXH311fnc5z43sF2STJgwIUnyB3/wB9lll11y9dVXD/MZAADwUiMQYS1y77335qGHHkqSPPbYY7nooouyzTbbZNGiRUmWfwZx3rx52XbbbZMk9913X55++ukkybHHHptDDjkkSfLggw/miSeeGFjnl7/8ZaZMmTLcpwMAwEvMqF4fAPBbS5Ysydy5c7Ns2bI8/fTTecc73pG3vOUt+ZM/+ZM8/PDDaa1l+vTpOeWUU5Ikl156aT796U+nqrLzzjvnpJNOSpLccMMNef/7358RI0bk6aefzlFHHSUQAQD4L1VrrdfHMKxmzZrVFixYMPD3vad8q4dHk4z54Ht6un8AAGD9UlVXtdZmrWyZW0wBAABIIhABAADo+Awi9Mi5p+3V0/2//ZAf93T/AACsfVxBBAAAIIlABAAAoCMQAQAASCIQAQAA6AhEAAAAkghEAAAAOgIRAACAJAIRAACAjkAEAAAgiUAEAGA9deedd2bXXXfNlClTMnXq1Jx44okDy/7v//2/2XbbbTN16tR88pOfTJLMnz8/fX196evry/Tp03POOec84/2WLVuWHXbYIW9961uH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QQTWGc/3IIRn22GHHbL55psnSaZOnZrHHnssTzzxxFAeHvAStbK7E1Y4/vjjU1W57777BmaXXnpp+vr6MnXq1LzhDW9Iktx0000DdyX09fVlk002yQknnDBs59BLBxxwQF7/+tfnpptuysSJE/O1r30tSXLmmWc+5/bSX/ziF5k+fXr6+voyZ86cnHzyyRk9enR++ctf5pvf/GYuueSS59wRAry4XEEE1nlf+cpXcsYZZ2TWrFk5/vjjs+mmmz5j+VlnnZUZM2Zkww03HJgdfPDBGTlyZPbbb7985jOfGXiSHrD+WdXdCXfeeWcuvPDCbLHFFgOzhx56KB/60IdywQUXZIstthi4RX2bbbZJf39/kmTZsmWZMGFC5syZM3wn0UPf/e53Vzr/xje+8ZzZgQcemAMPPPA58z/+4z9Oa+3FPjRgJVxBBNZpH/zgB3Prrbemv78/48ePz8c+9rFnLL/++uvzqU99Kn/3d383MPv2t7+d6667Lpdddlkuu+yyfPOb3xzuwwbWIqu6O+HII4/MF77whWf8B6TvfOc72XfffQeicezYsc/Z7uKLL85WW22V1772tUN30ABrSCAC67Rx48Zl5MiRGTFiRN73vvdl/vz5A8sWL16cOXPm5IwzzshWW201MJ8wYUKS5d+19a53vesZ2wAkyXnnnZcJEyZk+vTpz5jffPPNefDBB7PLLrtk5syZOeOMM56z7cpurQRYW7jFFFinLVmyJOPHj0+SnHPOOQOfIXrooYfylre8Jccdd1z+6I/+aGD9pUuX5qGHHsro0aPz1FNP5Yc//GHe9KY39eTYgbXTb37zm/zN3/xNLrzwwucsW7p0aa666qpcfPHFeeyxx/L6178+O+20U173utclSZ588snMmzcvxx577HAf9rA4/ex7e7r/ufuO6en+YV0gEIF1xgEHHJBLL7009913XyZOnJi//Mu/zKWXXpr+/v5UVSZNmjRwK+lXvvKVLFq0KJ/97Gfz2c9+Nkly4YUXZqONNsoee+yRp556KsuWLcub3vSmvO997+vlaQFrmVtvvTW33XbbwNXDxYsXZ8aMGZk/f34mTpyY3//9389GG22UjTbaKDvvvHOuueaagUD88Y9/nBkzZmTcuHG9PAWAVRKIwDpjZQ9COPTQQ1e67mc+85l85jOfWemyq6666kU9LmDdst122z3j+1EnTZqUBQsWZPTo0dlnn31yxBFHZOnSpXnyySdzxRVX5MgjjxxYd2VfDA+wNvEZRACA57Gqr2lYmcmTJ2fPPffM9ttvnx133DGHHXbYwK3t//mf/5mLLrrIl7wDazVXEAEAnseqvqZhhdtvv/0Zf3/iE5/IJz7xieest9FGG+X+++9/MQ8N4EUnEIGXpM+fuUdP9/+p/X/S0/0DAAwFt5gCAACQxBVEAIAB+511ZU/3f9Z+/72n+wdwBREAAIAkAhEAAICOQAQAACCJQAQAgLXWiSeemGnTpmXq1Kk54YQTkiQ/+MEPMnXq1IwYMSILFiwYWHf+/Pnp6+tLX19fpk+fnnPOOadXh81LmIfUAADAWmjhwoX5+7//+8yfPz8bbLBB9txzz7z1rW/NtGnTcvbZZ+f973//M9afNm1aFixYkFGjRmXJkiWZPn169t5774wa5Z/8rD5XEAEAYC10ww03ZPbs2XnFK16RUaNG5Q1veEPOPvvsTJ48Odtss81z1l+xXpI8/vjjqarhPmTWAQIRAADWQtOmTctll12W+++/P7/5zW9y/vnn584773zeba644opMnTo12223XU499VRXD/md+X8MAACshSZPnpxPfepTefOb35yNNtoofX19GTly5PNuM3v27Fx//fW54YYbMnfu3Oy11155+ctfPkxHzLrAFURgtd10000DH37v6+vLJptskhNOOCEPPPBAdt9992y99dbZfffd8+CDDyZJ/uM//iN77713pk+fnqlTp+brX/96j88AAF5aDj300Fx11VX5+c9/nk033TSve93rVmu7yZMnZ+ONN87ChQuH+AhZ1whEYLVts8026e/vT39/f6666qq84hWvyJw5c3Lcccdlt912yy233JLddtstxx13XJLkpJNOypQpU3LNNdfk0ksvzcc+9rE8+eSTPT4LAHjpuOeee5Ik//qv/5qzzz4773rXu1a57m233ZalS5cmSe64447ceOONmTRp0nAcJusQgQiskYsvvjhbbbVVXvva1+a8887L3LlzkyRz587NueeemySpqjzyyCNpreXRRx/NZptt5rMQAPA72G+//TJlypTsvffeOemkk/KqV70q55xzTiZOnJh//ud/zlve8pbsscceSZJf/OIXmT59evr6+jJnzpycfPLJGT16dI/PgJca/1ID1siZZ56ZAw44IEly9913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\n",
      "text/plain": [
       "<Figure size 1080x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "f,axarray = plt.subplots(1,1,figsize=(15,10))\n",
    "cityhist = members.groupby(['city'],as_index=False).count()\n",
    "splot = sns.barplot(x=cityhist['city'], y=cityhist['msno'])\n",
    "\n",
    "for i in splot.patches:\n",
    "    # get_x pulls left or right; get_height pushes up or down\n",
    "    splot.text(i.get_x()+.1, i.get_height()+110, i.get_height().astype(int), fontsize=10,color='black')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**成员来自21个不同的城市，使用从1到21的整数索引标识，其中城市1的用户数量最多，城市19用户数最少**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### gender"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x1257c3278>"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "malec = len(members[members['gender']=='male'])\n",
    "femalec = len(members[members['gender']=='female'])\n",
    "f,axarray = plt.subplots(1,1,figsize=(8,5))\n",
    "sns.barplot(x=['male','female'],y=[malec,femalec])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### city & bd & gender 3个特征的缺失值关系"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0, 34403)"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'count of rows')"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "([<matplotlib.axis.XTick at 0x125480eb8>,\n",
       "  <matplotlib.axis.XTick at 0x1254807f0>,\n",
       "  <matplotlib.axis.XTick at 0x125480518>],\n",
       " <a list of 3 Text xticklabel objects>)"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(0.5, 0, 'columns')"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'proportion of missing values in three variables')"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x12547f588>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "city_missing = members.groupby(['city']).size()['1']\n",
    "bd_missing = members.groupby(['bd']).size()[0]\n",
    "gender_missing = members['gender'].isnull().sum()\n",
    "\n",
    "total = members.shape[0]\n",
    "\n",
    "label_list = ['city', 'bd', 'gender']\n",
    "num_list1 = [city_missing, bd_missing, gender_missing]\n",
    "num_list2 = [total-city_missing, total-bd_missing, total-gender_missing]\n",
    "\n",
    "\n",
    "x = range(len(num_list1))\n",
    "f, axarray = plt.subplots(1,1,figsize=(10,5))\n",
    "rects1 = plt.bar(x, height=num_list1, width=0.45, alpha=0.8, label=\"missing_values\")\n",
    "rects2 = plt.bar(x, height=num_list2, width=0.45, label=\"total rows\", bottom=num_list1)\n",
    "plt.ylim(0, total)\n",
    "plt.ylabel(\"count of rows\")\n",
    "plt.xticks(x, label_list)\n",
    "plt.xlabel(\"columns\")\n",
    "plt.title(\"proportion of missing values in three variables\")\n",
    "plt.legend()\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**年龄（bd）有很多为0的数据，共有19934个，而性别（gender）有19902个数据缺失，并且城市（city）为1的数据为19445。从上图可以看出这三个数据的缺失值非常相似，也就是说这3个值同时出现在一行当中。在34403个总样本中，这3个值同时出现的样本有18356个，通过下载kkbox music app确认，原来这3个特征都在同一个页面中，也就是说，用户在没有输入信息的情况下跳过，则城市为1，年龄为0，并且输入性别为缺失值。所以这3个值可以作为缺失值处理。**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### registered_via（注册方式）特征分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(-0.10000000000000003, 180.0, '70')"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(0.8999999999999999, 111.0, '1')"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(1.9000000000000001, 4989.0, '4879')"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(2.9, 11502.0, '11392')"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(3.9, 9543.0, '9433')"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(4.8999999999999995, 8738.0, '8628')"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "f, axarray = plt.subplots(1,1,figsize=(10,5))\n",
    "cityhist = members.groupby(['registered_via'],as_index=False).count()\n",
    "splot = sns.barplot(x=cityhist['registered_via'], y=cityhist['msno'])\n",
    "\n",
    "for i in splot.patches:\n",
    "    # get_x pulls left or right; get_height pushes up or down\n",
    "    splot.text(i.get_x()+0.3, i.get_height()+110, i.get_height().astype(int), fontsize=10,color='black')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**注册方式主要分布在3，4，7和9**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### expiration_date & registration_init_time"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 将注册时间和到期时间分别转换成注册时长和年、月、日\n",
    "members['membership_days'] = members['expiration_date'].subtract(members['registration_init_time']).dt.days.astype(int)\n",
    "\n",
    "members['registration_year'] = members['registration_init_time'].dt.year\n",
    "members['registration_month'] = members['registration_init_time'].dt.month\n",
    "members['registration_day'] = members['registration_init_time'].dt.day\n",
    "\n",
    "members['expiration_year'] = members['expiration_date'].dt.year\n",
    "members['expiration_month'] = members['expiration_date'].dt.month\n",
    "members['expiration_day'] = members['expiration_date'].dt.day"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>msno</th>\n",
       "      <th>city</th>\n",
       "      <th>bd</th>\n",
       "      <th>gender</th>\n",
       "      <th>registered_via</th>\n",
       "      <th>registration_init_time</th>\n",
       "      <th>expiration_date</th>\n",
       "      <th>membership_days</th>\n",
       "      <th>registration_year</th>\n",
       "      <th>registration_month</th>\n",
       "      <th>registration_day</th>\n",
       "      <th>expiration_year</th>\n",
       "      <th>expiration_month</th>\n",
       "      <th>expiration_day</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>XQxgAYj3klVKjR3oxPPXYYFp4soD4TuBghkhMTD4oTw=</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>7</td>\n",
       "      <td>2011-08-20</td>\n",
       "      <td>2017-09-20</td>\n",
       "      <td>2223</td>\n",
       "      <td>2011</td>\n",
       "      <td>8</td>\n",
       "      <td>20</td>\n",
       "      <td>2017</td>\n",
       "      <td>9</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>UizsfmJb9mV54qE9hCYyU07Va97c0lCRLEQX3ae+ztM=</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>7</td>\n",
       "      <td>2015-06-28</td>\n",
       "      <td>2017-06-22</td>\n",
       "      <td>725</td>\n",
       "      <td>2015</td>\n",
       "      <td>6</td>\n",
       "      <td>28</td>\n",
       "      <td>2017</td>\n",
       "      <td>6</td>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>D8nEhsIOBSoE6VthTaqDX8U6lqjJ7dLdr72mOyLya2A=</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>4</td>\n",
       "      <td>2016-04-11</td>\n",
       "      <td>2017-07-12</td>\n",
       "      <td>457</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>11</td>\n",
       "      <td>2017</td>\n",
       "      <td>7</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>mCuD+tZ1hERA/o5GPqk38e041J8ZsBaLcu7nGoIIvhI=</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>9</td>\n",
       "      <td>2015-09-06</td>\n",
       "      <td>2015-09-07</td>\n",
       "      <td>1</td>\n",
       "      <td>2015</td>\n",
       "      <td>9</td>\n",
       "      <td>6</td>\n",
       "      <td>2015</td>\n",
       "      <td>9</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>q4HRBfVSssAFS9iRfxWrohxuk9kCYMKjHOEagUMV6rQ=</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>4</td>\n",
       "      <td>2017-01-26</td>\n",
       "      <td>2017-06-13</td>\n",
       "      <td>138</td>\n",
       "      <td>2017</td>\n",
       "      <td>1</td>\n",
       "      <td>26</td>\n",
       "      <td>2017</td>\n",
       "      <td>6</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>zgPOEyUn5a/Fvuzb3m69ajzxjkbblVtObglW89FzLdo=</td>\n",
       "      <td>13</td>\n",
       "      <td>43</td>\n",
       "      <td>female</td>\n",
       "      <td>9</td>\n",
       "      <td>2012-07-03</td>\n",
       "      <td>2017-10-06</td>\n",
       "      <td>1921</td>\n",
       "      <td>2012</td>\n",
       "      <td>7</td>\n",
       "      <td>3</td>\n",
       "      <td>2017</td>\n",
       "      <td>10</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>Sw9AT8QoR4wWiNUqHZUH6g5ahzGUx4lo1g+Y3xE2f2M=</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>4</td>\n",
       "      <td>2016-03-26</td>\n",
       "      <td>2016-03-29</td>\n",
       "      <td>3</td>\n",
       "      <td>2016</td>\n",
       "      <td>3</td>\n",
       "      <td>26</td>\n",
       "      <td>2016</td>\n",
       "      <td>3</td>\n",
       "      <td>29</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>pg6bT2XZkSP1TDBy4qn3HBPY/HffKQ/bg8WIISQYBSY=</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>7</td>\n",
       "      <td>2016-01-30</td>\n",
       "      <td>2017-09-30</td>\n",
       "      <td>609</td>\n",
       "      <td>2016</td>\n",
       "      <td>1</td>\n",
       "      <td>30</td>\n",
       "      <td>2017</td>\n",
       "      <td>9</td>\n",
       "      <td>30</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>kfk1AdTNH2dNqF5LzIs4e0vwGPejw2jrnFjJlcYnEgk=</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>7</td>\n",
       "      <td>2011-01-11</td>\n",
       "      <td>2017-09-30</td>\n",
       "      <td>2454</td>\n",
       "      <td>2011</td>\n",
       "      <td>1</td>\n",
       "      <td>11</td>\n",
       "      <td>2017</td>\n",
       "      <td>9</td>\n",
       "      <td>30</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>tscijwx4dbEp0NXGl+iFtHJ8zrj+TkcMrduOQk9t+gE=</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>7</td>\n",
       "      <td>2016-02-17</td>\n",
       "      <td>2017-06-13</td>\n",
       "      <td>482</td>\n",
       "      <td>2016</td>\n",
       "      <td>2</td>\n",
       "      <td>17</td>\n",
       "      <td>2017</td>\n",
       "      <td>6</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                           msno city  bd  gender  \\\n",
       "0  XQxgAYj3klVKjR3oxPPXYYFp4soD4TuBghkhMTD4oTw=    1   0     NaN   \n",
       "1  UizsfmJb9mV54qE9hCYyU07Va97c0lCRLEQX3ae+ztM=    1   0     NaN   \n",
       "2  D8nEhsIOBSoE6VthTaqDX8U6lqjJ7dLdr72mOyLya2A=    1   0     NaN   \n",
       "3  mCuD+tZ1hERA/o5GPqk38e041J8ZsBaLcu7nGoIIvhI=    1   0     NaN   \n",
       "4  q4HRBfVSssAFS9iRfxWrohxuk9kCYMKjHOEagUMV6rQ=    1   0     NaN   \n",
       "5  zgPOEyUn5a/Fvuzb3m69ajzxjkbblVtObglW89FzLdo=   13  43  female   \n",
       "6  Sw9AT8QoR4wWiNUqHZUH6g5ahzGUx4lo1g+Y3xE2f2M=    1   0     NaN   \n",
       "7  pg6bT2XZkSP1TDBy4qn3HBPY/HffKQ/bg8WIISQYBSY=    1   0     NaN   \n",
       "8  kfk1AdTNH2dNqF5LzIs4e0vwGPejw2jrnFjJlcYnEgk=    1   0     NaN   \n",
       "9  tscijwx4dbEp0NXGl+iFtHJ8zrj+TkcMrduOQk9t+gE=    1   0     NaN   \n",
       "\n",
       "  registered_via registration_init_time expiration_date  membership_days  \\\n",
       "0              7             2011-08-20      2017-09-20             2223   \n",
       "1              7             2015-06-28      2017-06-22              725   \n",
       "2              4             2016-04-11      2017-07-12              457   \n",
       "3              9             2015-09-06      2015-09-07                1   \n",
       "4              4             2017-01-26      2017-06-13              138   \n",
       "5              9             2012-07-03      2017-10-06             1921   \n",
       "6              4             2016-03-26      2016-03-29                3   \n",
       "7              7             2016-01-30      2017-09-30              609   \n",
       "8              7             2011-01-11      2017-09-30             2454   \n",
       "9              7             2016-02-17      2017-06-13              482   \n",
       "\n",
       "   registration_year  registration_month  registration_day  expiration_year  \\\n",
       "0               2011                   8                20             2017   \n",
       "1               2015                   6                28             2017   \n",
       "2               2016                   4                11             2017   \n",
       "3               2015                   9                 6             2015   \n",
       "4               2017                   1                26             2017   \n",
       "5               2012                   7                 3             2017   \n",
       "6               2016                   3                26             2016   \n",
       "7               2016                   1                30             2017   \n",
       "8               2011                   1                11             2017   \n",
       "9               2016                   2                17             2017   \n",
       "\n",
       "   expiration_month  expiration_day  \n",
       "0                 9              20  \n",
       "1                 6              22  \n",
       "2                 7              12  \n",
       "3                 9               7  \n",
       "4                 6              13  \n",
       "5                10               6  \n",
       "6                 3              29  \n",
       "7                 9              30  \n",
       "8                 9              30  \n",
       "9                 6              13  "
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "members.head(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2、Songs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>song_id</th>\n",
       "      <th>song_length</th>\n",
       "      <th>genre_ids</th>\n",
       "      <th>artist_name</th>\n",
       "      <th>composer</th>\n",
       "      <th>lyricist</th>\n",
       "      <th>language</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>CXoTN1eb7AI+DntdU1vbcwGRV4SCIDxZu+YD8JP8r4E=</td>\n",
       "      <td>247640</td>\n",
       "      <td>465</td>\n",
       "      <td>張信哲 (Jeff Chang)</td>\n",
       "      <td>董貞</td>\n",
       "      <td>何啟弘</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>o0kFgae9QtnYgRkVPqLJwa05zIhRlUjfF7O1tDw0ZDU=</td>\n",
       "      <td>197328</td>\n",
       "      <td>444</td>\n",
       "      <td>BLACKPINK</td>\n",
       "      <td>TEDDY|  FUTURE BOUNCE|  Bekuh BOOM</td>\n",
       "      <td>TEDDY</td>\n",
       "      <td>31.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>DwVvVurfpuz+XPuFvucclVQEyPqcpUkHR0ne1RQzPs0=</td>\n",
       "      <td>231781</td>\n",
       "      <td>465</td>\n",
       "      <td>SUPER JUNIOR</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>31.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>dKMBWoZyScdxSkihKG+Vf47nc18N9q4m58+b4e7dSSE=</td>\n",
       "      <td>273554</td>\n",
       "      <td>465</td>\n",
       "      <td>S.H.E</td>\n",
       "      <td>湯小康</td>\n",
       "      <td>徐世珍</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>W3bqWd3T+VeHFzHAUfARgW9AvVRaF4N5Yzm4Mr6Eo/o=</td>\n",
       "      <td>140329</td>\n",
       "      <td>726</td>\n",
       "      <td>貴族精選</td>\n",
       "      <td>Traditional</td>\n",
       "      <td>Traditional</td>\n",
       "      <td>52.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                        song_id  song_length genre_ids  \\\n",
       "0  CXoTN1eb7AI+DntdU1vbcwGRV4SCIDxZu+YD8JP8r4E=       247640       465   \n",
       "1  o0kFgae9QtnYgRkVPqLJwa05zIhRlUjfF7O1tDw0ZDU=       197328       444   \n",
       "2  DwVvVurfpuz+XPuFvucclVQEyPqcpUkHR0ne1RQzPs0=       231781       465   \n",
       "3  dKMBWoZyScdxSkihKG+Vf47nc18N9q4m58+b4e7dSSE=       273554       465   \n",
       "4  W3bqWd3T+VeHFzHAUfARgW9AvVRaF4N5Yzm4Mr6Eo/o=       140329       726   \n",
       "\n",
       "        artist_name                            composer     lyricist language  \n",
       "0  張信哲 (Jeff Chang)                                  董貞          何啟弘      3.0  \n",
       "1         BLACKPINK  TEDDY|  FUTURE BOUNCE|  Bekuh BOOM        TEDDY     31.0  \n",
       "2      SUPER JUNIOR                                 NaN          NaN     31.0  \n",
       "3             S.H.E                                 湯小康          徐世珍      3.0  \n",
       "4              貴族精選                         Traditional  Traditional     52.0  "
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "songs = pd.read_csv(dpath + 'songs.csv',dtype={'genre_ids': 'category',\n",
    "                                                'language' : 'category',\n",
    "                                                'artist_name' : 'category',\n",
    "                                                'composer' : 'category',\n",
    "                                                'lyricist' : 'category'})\n",
    "songs.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "There are: 2296833 songs; 329874 composers for 1047 genres in 20 languages\n"
     ]
    }
   ],
   "source": [
    "print (\"There are:\",len(songs),\"songs;\",len(songs['composer'].unique()),\n",
    "       \"composers for\",len(songs['genre_ids'].unique()),\"genres in\",\n",
    "      len(songs['language'].unique()),\"languages\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 查看Songs数据缺失情况"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "song_id              0\n",
       "song_length          0\n",
       "genre_ids        94145\n",
       "artist_name          0\n",
       "composer       1071607\n",
       "lyricist       1945727\n",
       "language             0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "songs.isnull().sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### artist_name（歌手）特征分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([1.07866e+05, 0.00000e+00, 0.00000e+00, 0.00000e+00, 0.00000e+00,\n",
       "        3.02490e+04, 0.00000e+00, 0.00000e+00, 0.00000e+00, 1.44220e+04,\n",
       "        0.00000e+00, 9.40000e+03, 0.00000e+00, 6.53500e+03, 0.00000e+00,\n",
       "        5.04000e+03, 3.79800e+03, 3.44400e+03, 2.89700e+03, 3.27600e+03,\n",
       "        5.05700e+03, 2.04600e+03, 3.44900e+03, 2.71100e+03, 2.18500e+03,\n",
       "        3.15000e+03, 1.50100e+03, 1.70200e+03, 1.93500e+03, 1.43200e+03,\n",
       "        1.15500e+03, 1.14200e+03, 1.15700e+03, 8.01000e+02, 8.44000e+02,\n",
       "        6.51000e+02, 6.00000e+02, 5.14000e+02, 5.18000e+02, 3.90000e+02,\n",
       "        3.37000e+02, 3.45000e+02, 2.77000e+02, 2.35000e+02, 2.10000e+02,\n",
       "        1.70000e+02, 1.56000e+02, 1.29000e+02, 1.12000e+02, 9.40000e+01,\n",
       "        9.30000e+01, 7.50000e+01, 4.90000e+01, 3.90000e+01, 3.60000e+01,\n",
       "        2.80000e+01, 3.40000e+01, 2.20000e+01, 2.80000e+01, 1.30000e+01,\n",
       "        1.60000e+01, 5.00000e+00, 7.00000e+00, 5.00000e+00, 7.00000e+00,\n",
       "        4.00000e+00, 6.00000e+00, 0.00000e+00, 1.00000e+00, 3.00000e+00,\n",
       "        2.00000e+00, 1.00000e+00, 0.00000e+00, 0.00000e+00, 0.00000e+00,\n",
       "        0.00000e+00, 0.00000e+00, 0.00000e+00, 1.00000e+00, 0.00000e+00,\n",
       "        0.00000e+00, 0.00000e+00, 0.00000e+00, 0.00000e+00, 0.00000e+00,\n",
       "        0.00000e+00, 0.00000e+00, 0.00000e+00, 0.00000e+00, 0.00000e+00,\n",
       "        0.00000e+00, 0.00000e+00, 0.00000e+00, 0.00000e+00, 0.00000e+00,\n",
       "        0.00000e+00, 0.00000e+00, 0.00000e+00, 0.00000e+00, 1.00000e+00]),\n",
       " array([0.        , 0.05164207, 0.10328414, 0.15492621, 0.20656828,\n",
       "        0.25821035, 0.30985242, 0.3614945 , 0.41313657, 0.46477864,\n",
       "        0.51642071, 0.56806278, 0.61970485, 0.67134692, 0.72298899,\n",
       "        0.77463106, 0.82627313, 0.8779152 , 0.92955727, 0.98119934,\n",
       "        1.03284141, 1.08448349, 1.13612556, 1.18776763, 1.2394097 ,\n",
       "        1.29105177, 1.34269384, 1.39433591, 1.44597798, 1.49762005,\n",
       "        1.54926212, 1.60090419, 1.65254626, 1.70418833, 1.75583041,\n",
       "        1.80747248, 1.85911455, 1.91075662, 1.96239869, 2.01404076,\n",
       "        2.06568283, 2.1173249 , 2.16896697, 2.22060904, 2.27225111,\n",
       "        2.32389318, 2.37553525, 2.42717733, 2.4788194 , 2.53046147,\n",
       "        2.58210354, 2.63374561, 2.68538768, 2.73702975, 2.78867182,\n",
       "        2.84031389, 2.89195596, 2.94359803, 2.9952401 , 3.04688217,\n",
       "        3.09852424, 3.15016632, 3.20180839, 3.25345046, 3.30509253,\n",
       "        3.3567346 , 3.40837667, 3.46001874, 3.51166081, 3.56330288,\n",
       "        3.61494495, 3.66658702, 3.71822909, 3.76987116, 3.82151324,\n",
       "        3.87315531, 3.92479738, 3.97643945, 4.02808152, 4.07972359,\n",
       "        4.13136566, 4.18300773, 4.2346498 , 4.28629187, 4.33793394,\n",
       "        4.38957601, 4.44121808, 4.49286016, 4.54450223, 4.5961443 ,\n",
       "        4.64778637, 4.69942844, 4.75107051, 4.80271258, 4.85435465,\n",
       "        4.90599672, 4.95763879, 5.00928086, 5.06092293, 5.112565  ,\n",
       "        5.16420707]),\n",
       " <a list of 100 Patch objects>)"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'Log histogram of artist occurence in songs table')"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(0.5, 0, 'log10(number of occurences)')"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 统计某位歌手的歌曲数量\n",
    "artists_occurence = songs.artist_name.value_counts()\n",
    "f, axarray = plt.subplots(1,1,figsize=(10,5))\n",
    "# x轴表示10的几次方，y轴表示数量\n",
    "plt.hist(np.log10(artists_occurence), bins=100)\n",
    "# 画log图\n",
    "plt.yscale('log')\n",
    "plt.title('Log histogram of artist occurence in songs table')\n",
    "plt.xlabel('log10(number of occurences)')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**上图表示某位歌手的歌曲数量，右下角有一个歌手的歌曲数量居然 > 10^5，这个歌手名叫：Various Artists，百度百科里的解释是：Various Artists简称VA或者V.A，意思是各种各样的艺术家又称“群星”。很多是合辑的专辑开头都冠以Various Artists，指该专辑不是个人的。一般在音乐论坛和专辑下载里经常可以看到这种合集。**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>song_id</th>\n",
       "      <th>song_length</th>\n",
       "      <th>genre_ids</th>\n",
       "      <th>artist_name</th>\n",
       "      <th>composer</th>\n",
       "      <th>lyricist</th>\n",
       "      <th>language</th>\n",
       "      <th>split_artist_name</th>\n",
       "      <th>number_of_artists</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>CXoTN1eb7AI+DntdU1vbcwGRV4SCIDxZu+YD8JP8r4E=</td>\n",
       "      <td>247640</td>\n",
       "      <td>465</td>\n",
       "      <td>張信哲 (Jeff Chang)</td>\n",
       "      <td>董貞</td>\n",
       "      <td>何啟弘</td>\n",
       "      <td>3.0</td>\n",
       "      <td>[張信哲 (Jeff Chang)]</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>o0kFgae9QtnYgRkVPqLJwa05zIhRlUjfF7O1tDw0ZDU=</td>\n",
       "      <td>197328</td>\n",
       "      <td>444</td>\n",
       "      <td>BLACKPINK</td>\n",
       "      <td>TEDDY|  FUTURE BOUNCE|  Bekuh BOOM</td>\n",
       "      <td>TEDDY</td>\n",
       "      <td>31.0</td>\n",
       "      <td>[BLACKPINK]</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>DwVvVurfpuz+XPuFvucclVQEyPqcpUkHR0ne1RQzPs0=</td>\n",
       "      <td>231781</td>\n",
       "      <td>465</td>\n",
       "      <td>SUPER JUNIOR</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>31.0</td>\n",
       "      <td>[SUPER JUNIOR]</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>dKMBWoZyScdxSkihKG+Vf47nc18N9q4m58+b4e7dSSE=</td>\n",
       "      <td>273554</td>\n",
       "      <td>465</td>\n",
       "      <td>S.H.E</td>\n",
       "      <td>湯小康</td>\n",
       "      <td>徐世珍</td>\n",
       "      <td>3.0</td>\n",
       "      <td>[S.H.E]</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>W3bqWd3T+VeHFzHAUfARgW9AvVRaF4N5Yzm4Mr6Eo/o=</td>\n",
       "      <td>140329</td>\n",
       "      <td>726</td>\n",
       "      <td>貴族精選</td>\n",
       "      <td>Traditional</td>\n",
       "      <td>Traditional</td>\n",
       "      <td>52.0</td>\n",
       "      <td>[貴族精選]</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>kKJ2JNU5h8rphyW21ovC+RZU+yEHPM+3w85J37p7vEQ=</td>\n",
       "      <td>235520</td>\n",
       "      <td>864|857|850|843</td>\n",
       "      <td>貴族精選</td>\n",
       "      <td>Joe Hisaishi</td>\n",
       "      <td>Hayao Miyazaki</td>\n",
       "      <td>17.0</td>\n",
       "      <td>[貴族精選]</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>N9vbanw7BSMoUgdfJlgX1aZPE1XZg8OS1wf88AQEcMc=</td>\n",
       "      <td>226220</td>\n",
       "      <td>458</td>\n",
       "      <td>伍佰 &amp; China Blue</td>\n",
       "      <td>Jonathan Lee</td>\n",
       "      <td>NaN</td>\n",
       "      <td>3.0</td>\n",
       "      <td>[伍佰 &amp; China Blue]</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>GsCpr618xfveHYJdo+E5SybrpR906tsjLMeKyrCNw8s=</td>\n",
       "      <td>276793</td>\n",
       "      <td>465</td>\n",
       "      <td>光良 (Michael Wong)</td>\n",
       "      <td>光良</td>\n",
       "      <td>彭資閔</td>\n",
       "      <td>3.0</td>\n",
       "      <td>[光良 (Michael Wong)]</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>oTi7oINPX+rxoGp+3O6llSltQTl80jDqHoULfRoLcG4=</td>\n",
       "      <td>228623</td>\n",
       "      <td>465</td>\n",
       "      <td>林俊傑 (JJ Lin)</td>\n",
       "      <td>JJ Lin</td>\n",
       "      <td>Wu Qing Feng</td>\n",
       "      <td>3.0</td>\n",
       "      <td>[林俊傑 (JJ Lin)]</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>btcG03OHY3GNKWccPP0auvtSbhxog/kllIIOx5grE/k=</td>\n",
       "      <td>232629</td>\n",
       "      <td>352|1995</td>\n",
       "      <td>Kodaline</td>\n",
       "      <td>Stephen Garrigan| Mark Prendergast| Vincent Ma...</td>\n",
       "      <td>Stephen Garrigan| Mark Prendergast| Vincent Ma...</td>\n",
       "      <td>52.0</td>\n",
       "      <td>[Kodaline]</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                        song_id  song_length        genre_ids  \\\n",
       "0  CXoTN1eb7AI+DntdU1vbcwGRV4SCIDxZu+YD8JP8r4E=       247640              465   \n",
       "1  o0kFgae9QtnYgRkVPqLJwa05zIhRlUjfF7O1tDw0ZDU=       197328              444   \n",
       "2  DwVvVurfpuz+XPuFvucclVQEyPqcpUkHR0ne1RQzPs0=       231781              465   \n",
       "3  dKMBWoZyScdxSkihKG+Vf47nc18N9q4m58+b4e7dSSE=       273554              465   \n",
       "4  W3bqWd3T+VeHFzHAUfARgW9AvVRaF4N5Yzm4Mr6Eo/o=       140329              726   \n",
       "5  kKJ2JNU5h8rphyW21ovC+RZU+yEHPM+3w85J37p7vEQ=       235520  864|857|850|843   \n",
       "6  N9vbanw7BSMoUgdfJlgX1aZPE1XZg8OS1wf88AQEcMc=       226220              458   \n",
       "7  GsCpr618xfveHYJdo+E5SybrpR906tsjLMeKyrCNw8s=       276793              465   \n",
       "8  oTi7oINPX+rxoGp+3O6llSltQTl80jDqHoULfRoLcG4=       228623              465   \n",
       "9  btcG03OHY3GNKWccPP0auvtSbhxog/kllIIOx5grE/k=       232629         352|1995   \n",
       "\n",
       "         artist_name                                           composer  \\\n",
       "0   張信哲 (Jeff Chang)                                                 董貞   \n",
       "1          BLACKPINK                 TEDDY|  FUTURE BOUNCE|  Bekuh BOOM   \n",
       "2       SUPER JUNIOR                                                NaN   \n",
       "3              S.H.E                                                湯小康   \n",
       "4               貴族精選                                        Traditional   \n",
       "5               貴族精選                                       Joe Hisaishi   \n",
       "6    伍佰 & China Blue                                       Jonathan Lee   \n",
       "7  光良 (Michael Wong)                                                 光良   \n",
       "8       林俊傑 (JJ Lin)                                             JJ Lin   \n",
       "9           Kodaline  Stephen Garrigan| Mark Prendergast| Vincent Ma...   \n",
       "\n",
       "                                            lyricist language  \\\n",
       "0                                                何啟弘      3.0   \n",
       "1                                              TEDDY     31.0   \n",
       "2                                                NaN     31.0   \n",
       "3                                                徐世珍      3.0   \n",
       "4                                        Traditional     52.0   \n",
       "5                                     Hayao Miyazaki     17.0   \n",
       "6                                                NaN      3.0   \n",
       "7                                                彭資閔      3.0   \n",
       "8                                       Wu Qing Feng      3.0   \n",
       "9  Stephen Garrigan| Mark Prendergast| Vincent Ma...     52.0   \n",
       "\n",
       "     split_artist_name  number_of_artists  \n",
       "0   [張信哲 (Jeff Chang)]                  1  \n",
       "1          [BLACKPINK]                  1  \n",
       "2       [SUPER JUNIOR]                  1  \n",
       "3              [S.H.E]                  1  \n",
       "4               [貴族精選]                  1  \n",
       "5               [貴族精選]                  1  \n",
       "6    [伍佰 & China Blue]                  1  \n",
       "7  [光良 (Michael Wong)]                  1  \n",
       "8       [林俊傑 (JJ Lin)]                  1  \n",
       "9           [Kodaline]                  1  "
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 统计每首歌的歌手数量\n",
    "import re\n",
    "songs['split_artist_name'] = [re.split('\\||,|\\/', artist_name) for artist_name in songs.artist_name]\n",
    "songs['number_of_artists'] = songs['split_artist_name'].str.len()\n",
    "songs.head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,\n",
      "       18, 19, 20, 21, 22, 23, 24, 25, 26, 27]), array([2193958,   55337,   32269,    5183,    2450,    1198,     769,\n",
      "           811,     402,     812,     336,     233,     280,     264,\n",
      "           411,     202,     112,     203,     210,     357,     494,\n",
      "           274,     144,      42,      47,      33,       2]))\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1434d0a90>]"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "(0, 30)"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(0.5, 0, 'Number of artists in the collaboration')"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Number of occurences of collaboration this size')"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 对歌手数量去重后可视化\n",
    "collaborations = (np.unique(songs.number_of_artists, return_counts=True))\n",
    "\n",
    "print(collaborations)\n",
    "\n",
    "f, axarray = plt.subplots(1,1,figsize=(10,5))\n",
    "# x轴代表歌手个数，y轴代表有x个歌手的样本总数\n",
    "plt.plot(collaborations[0], collaborations[1], 'bo')\n",
    "# 设定x坐标轴的范围0-30\n",
    "plt.xlim([0,30])\n",
    "# 画log图\n",
    "plt.yscale('log')\n",
    "# 艺术家的个数\n",
    "plt.xlabel(\"Number of artists in the collaboration\")\n",
    "# 多个艺术家出现的样本数\n",
    "plt.ylabel(\"Number of occurences of collaboration this size\")\n",
    "# 在轴上显示次要刻度\n",
    "plt.minorticks_on()\n",
    "plt.grid(b=True, which='major', color='grey', linestyle='-', alpha=0.7)\n",
    "plt.grid(b=True, which='minor', color='grey', linestyle='--', alpha=0.5)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**从上图可以看出，只有1位歌手的歌曲数量有2193958首，但是有很多歌曲是有多位歌手，其中歌手数量最多（27位）的歌曲有2首**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 显示进度条\n",
    "# from tqdm import tqdm\n",
    "# unique_artists = np.unique(\n",
    "#     [artist for sublist in songs.split_artist_name \n",
    "#              for artist in sublist]\n",
    "# )\n",
    "\n",
    "# artist_count = []\n",
    "\n",
    "# for artist in tqdm(unique_artists):\n",
    "#     artist_count.append(\n",
    "#         len(songs[[artist in row for row in songs.split_artist_name]]))\n",
    "\n",
    "# artist_count = pd.DataFrame(artist_count, unique_artists)\n",
    "\n",
    "# plt.hist(np.log10(artist_count[0]), bins=100)\n",
    "# plt.title('Log histogram of artist occurence in songs table')\n",
    "# plt.xlabel('log10(number of occurences)')\n",
    "# plt.show()\n",
    "\n",
    "# **上面的代码运行太慢了，提前终止**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "102875"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 歌手个数大于1个的数量\n",
    "len(songs[(songs.number_of_artists > 1)])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>song_id</th>\n",
       "      <th>song_length</th>\n",
       "      <th>genre_ids</th>\n",
       "      <th>artist_name</th>\n",
       "      <th>composer</th>\n",
       "      <th>lyricist</th>\n",
       "      <th>language</th>\n",
       "      <th>split_artist_name</th>\n",
       "      <th>number_of_artists</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1301082</th>\n",
       "      <td>tblt7OyD9iec6ZyBi1YkjO4L2MvMHu+Lajfj9mrnq3Y=</td>\n",
       "      <td>296594</td>\n",
       "      <td>1616|2058</td>\n",
       "      <td>K.B.| Kamera| KAMERA| Kanov| Kapshul| kertek| ...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>52.0</td>\n",
       "      <td>[K.B.,  Kamera,  KAMERA,  Kanov,  Kapshul,  ke...</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2213152</th>\n",
       "      <td>b6ughD42nklXMRbSB06bQkpaJKOLIRYisq+fKZ7kAdU=</td>\n",
       "      <td>223268</td>\n",
       "      <td>1616|2058</td>\n",
       "      <td>Faskil| Cream Sound| Elefant Man| Mister P| Dj...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>52.0</td>\n",
       "      <td>[Faskil,  Cream Sound,  Elefant Man,  Mister P...</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                              song_id  song_length  genre_ids  \\\n",
       "1301082  tblt7OyD9iec6ZyBi1YkjO4L2MvMHu+Lajfj9mrnq3Y=       296594  1616|2058   \n",
       "2213152  b6ughD42nklXMRbSB06bQkpaJKOLIRYisq+fKZ7kAdU=       223268  1616|2058   \n",
       "\n",
       "                                               artist_name composer lyricist  \\\n",
       "1301082  K.B.| Kamera| KAMERA| Kanov| Kapshul| kertek| ...      NaN      NaN   \n",
       "2213152  Faskil| Cream Sound| Elefant Man| Mister P| Dj...      NaN      NaN   \n",
       "\n",
       "        language                                  split_artist_name  \\\n",
       "1301082     52.0  [K.B.,  Kamera,  KAMERA,  Kanov,  Kapshul,  ke...   \n",
       "2213152     52.0  [Faskil,  Cream Sound,  Elefant Man,  Mister P...   \n",
       "\n",
       "         number_of_artists  \n",
       "1301082                 27  \n",
       "2213152                 27  "
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 查看一下歌手个数大于26的是哪些歌曲\n",
    "songs[(songs.number_of_artists>26)]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**发现有10^5首歌曲(占数据库的4.5%)有多位歌手。**\n",
    "\n",
    "**下面对genre_ids做同样的操作并将它们拆分。**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### genre_ids（歌曲类别）特征分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "songs['split_genre_ids'] = [re.split('\\|', str(genre_id)) for genre_id in songs.genre_ids]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>song_id</th>\n",
       "      <th>song_length</th>\n",
       "      <th>genre_ids</th>\n",
       "      <th>artist_name</th>\n",
       "      <th>composer</th>\n",
       "      <th>lyricist</th>\n",
       "      <th>language</th>\n",
       "      <th>split_artist_name</th>\n",
       "      <th>number_of_artists</th>\n",
       "      <th>split_genre_ids</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>CXoTN1eb7AI+DntdU1vbcwGRV4SCIDxZu+YD8JP8r4E=</td>\n",
       "      <td>247640</td>\n",
       "      <td>465</td>\n",
       "      <td>張信哲 (Jeff Chang)</td>\n",
       "      <td>董貞</td>\n",
       "      <td>何啟弘</td>\n",
       "      <td>3.0</td>\n",
       "      <td>[張信哲 (Jeff Chang)]</td>\n",
       "      <td>1</td>\n",
       "      <td>[465]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>o0kFgae9QtnYgRkVPqLJwa05zIhRlUjfF7O1tDw0ZDU=</td>\n",
       "      <td>197328</td>\n",
       "      <td>444</td>\n",
       "      <td>BLACKPINK</td>\n",
       "      <td>TEDDY|  FUTURE BOUNCE|  Bekuh BOOM</td>\n",
       "      <td>TEDDY</td>\n",
       "      <td>31.0</td>\n",
       "      <td>[BLACKPINK]</td>\n",
       "      <td>1</td>\n",
       "      <td>[444]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>DwVvVurfpuz+XPuFvucclVQEyPqcpUkHR0ne1RQzPs0=</td>\n",
       "      <td>231781</td>\n",
       "      <td>465</td>\n",
       "      <td>SUPER JUNIOR</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>31.0</td>\n",
       "      <td>[SUPER JUNIOR]</td>\n",
       "      <td>1</td>\n",
       "      <td>[465]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>dKMBWoZyScdxSkihKG+Vf47nc18N9q4m58+b4e7dSSE=</td>\n",
       "      <td>273554</td>\n",
       "      <td>465</td>\n",
       "      <td>S.H.E</td>\n",
       "      <td>湯小康</td>\n",
       "      <td>徐世珍</td>\n",
       "      <td>3.0</td>\n",
       "      <td>[S.H.E]</td>\n",
       "      <td>1</td>\n",
       "      <td>[465]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>W3bqWd3T+VeHFzHAUfARgW9AvVRaF4N5Yzm4Mr6Eo/o=</td>\n",
       "      <td>140329</td>\n",
       "      <td>726</td>\n",
       "      <td>貴族精選</td>\n",
       "      <td>Traditional</td>\n",
       "      <td>Traditional</td>\n",
       "      <td>52.0</td>\n",
       "      <td>[貴族精選]</td>\n",
       "      <td>1</td>\n",
       "      <td>[726]</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                        song_id  song_length genre_ids  \\\n",
       "0  CXoTN1eb7AI+DntdU1vbcwGRV4SCIDxZu+YD8JP8r4E=       247640       465   \n",
       "1  o0kFgae9QtnYgRkVPqLJwa05zIhRlUjfF7O1tDw0ZDU=       197328       444   \n",
       "2  DwVvVurfpuz+XPuFvucclVQEyPqcpUkHR0ne1RQzPs0=       231781       465   \n",
       "3  dKMBWoZyScdxSkihKG+Vf47nc18N9q4m58+b4e7dSSE=       273554       465   \n",
       "4  W3bqWd3T+VeHFzHAUfARgW9AvVRaF4N5Yzm4Mr6Eo/o=       140329       726   \n",
       "\n",
       "        artist_name                            composer     lyricist language  \\\n",
       "0  張信哲 (Jeff Chang)                                  董貞          何啟弘      3.0   \n",
       "1         BLACKPINK  TEDDY|  FUTURE BOUNCE|  Bekuh BOOM        TEDDY     31.0   \n",
       "2      SUPER JUNIOR                                 NaN          NaN     31.0   \n",
       "3             S.H.E                                 湯小康          徐世珍      3.0   \n",
       "4              貴族精選                         Traditional  Traditional     52.0   \n",
       "\n",
       "    split_artist_name  number_of_artists split_genre_ids  \n",
       "0  [張信哲 (Jeff Chang)]                  1           [465]  \n",
       "1         [BLACKPINK]                  1           [444]  \n",
       "2      [SUPER JUNIOR]                  1           [465]  \n",
       "3             [S.H.E]                  1           [465]  \n",
       "4              [貴族精選]                  1           [726]  "
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "songs.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "unique_genres = np.unique([genre for sublist in songs.split_genre_ids for genre in sublist])\n",
    "genre_count = []\n",
    "\n",
    "for genre in unique_genres:\n",
    "    genre_count.append(len(songs[[genre in row for row in songs.split_genre_ids]]))\n",
    "\n",
    "genre_count = pd.DataFrame(genre_count, unique_genres)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([ 2.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  2.,\n",
       "         0.,  1.,  1.,  0.,  0.,  4.,  0.,  2.,  1.,  2.,  1.,  5.,  2.,\n",
       "         2.,  3.,  2.,  0.,  2.,  2.,  2.,  2.,  5.,  3.,  4.,  2.,  6.,\n",
       "         6.,  3.,  2.,  1.,  1.,  1.,  3.,  2.,  4.,  3., 10.,  5.,  2.,\n",
       "         5.,  3.,  7.,  5.,  6.,  2.,  0.,  2.,  1.,  2.,  2.,  4.,  2.,\n",
       "         1.,  2.,  5.,  3.,  1.,  5.,  2.,  3.,  2.,  4.,  1.,  4.,  1.,\n",
       "         1.,  1.,  1.,  1.,  2.,  1.,  1.,  0.,  2.,  0.,  0.,  1.,  2.,\n",
       "         1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.]),\n",
       " array([0.        , 0.05770361, 0.11540723, 0.17311084, 0.23081446,\n",
       "        0.28851807, 0.34622169, 0.4039253 , 0.46162892, 0.51933253,\n",
       "        0.57703615, 0.63473976, 0.69244338, 0.75014699, 0.80785061,\n",
       "        0.86555422, 0.92325784, 0.98096145, 1.03866507, 1.09636868,\n",
       "        1.1540723 , 1.21177591, 1.26947953, 1.32718314, 1.38488676,\n",
       "        1.44259037, 1.50029399, 1.5579976 , 1.61570122, 1.67340483,\n",
       "        1.73110845, 1.78881206, 1.84651568, 1.90421929, 1.96192291,\n",
       "        2.01962652, 2.07733014, 2.13503375, 2.19273737, 2.25044098,\n",
       "        2.3081446 , 2.36584821, 2.42355183, 2.48125544, 2.53895906,\n",
       "        2.59666267, 2.65436629, 2.7120699 , 2.76977352, 2.82747713,\n",
       "        2.88518075, 2.94288436, 3.00058798, 3.05829159, 3.11599521,\n",
       "        3.17369882, 3.23140244, 3.28910605, 3.34680967, 3.40451328,\n",
       "        3.4622169 , 3.51992051, 3.57762413, 3.63532774, 3.69303136,\n",
       "        3.75073497, 3.80843859, 3.8661422 , 3.92384582, 3.98154943,\n",
       "        4.03925305, 4.09695666, 4.15466028, 4.21236389, 4.27006751,\n",
       "        4.32777112, 4.38547474, 4.44317835, 4.50088197, 4.55858558,\n",
       "        4.6162892 , 4.67399281, 4.73169643, 4.78940004, 4.84710366,\n",
       "        4.90480727, 4.96251089, 5.0202145 , 5.07791812, 5.13562173,\n",
       "        5.19332535, 5.25102896, 5.30873258, 5.36643619, 5.42413981,\n",
       "        5.48184342, 5.53954704, 5.59725065, 5.65495427, 5.71265788,\n",
       "        5.7703615 ]),\n",
       " <a list of 100 Patch objects>)"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'Log histogram of genre occurence in songs table')"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(0.5, 0, 'log10(number of occurences)')"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "f, axarray = plt.subplots(1,1,figsize=(10,5))\n",
    "plt.hist(np.log10(genre_count[0]), bins=100)\n",
    "plt.title('Log histogram of genre occurence in songs table')\n",
    "plt.xlabel('log10(number of occurences)')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**genre_ids的分布如上图所示，最多的有10个，整体也成高斯分布图，可以新增一列表示个数**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### language（语言）特征分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 将语言转换为int型\n",
    "songs['language'] = songs['language'].apply(lambda x : int(float(x)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 108,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(-0.30000000000000004, 86553.0, '85543')"
      ]
     },
     "execution_count": 108,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(0.7, 66307.0, '65297')"
      ]
     },
     "execution_count": 108,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(1.7000000000000002, 10990.0, '9980')"
      ]
     },
     "execution_count": 108,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(2.7, 33036.0, '32026')"
      ]
     },
     "execution_count": 108,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(3.7, 14397.0, '13387')"
      ]
     },
     "execution_count": 108,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(4.699999999999999, 18997.0, '17987')"
      ]
     },
     "execution_count": 108,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(5.699999999999999, 1152.0, '142')"
      ]
     },
     "execution_count": 108,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(6.699999999999999, 2330.0, '1320')"
      ]
     },
     "execution_count": 108,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(7.699999999999999, 193288.0, '192278')"
      ]
     },
     "execution_count": 108,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(8.7, 2885.0, '1875')"
      ]
     },
     "execution_count": 108,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAngAAAE+CAYAAAAefm3WAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3deXhV1dn38e9NECeKoAwFAoIKAiEhkFRBC61aEXACSpEUZRJ5nNFWhT7WidaK9W2xFsUBUKiWgCKCFhAqitaKECDMIBGwJFIDiKCAQPB+/zg75zmBgESTnGTz+1zXubLPvddae63Gws3ae+1l7o6IiIiIhEeVeHdAREREREqXEjwRERGRkFGCJyIiIhIySvBEREREQkYJnoiIiEjIKMETERERCZkyTfDMrJGZvW1mq81slZkNDeKnm9lcM1sf/KwVxM3MnjCzHDNbbmbtYtrqH5Rfb2b9Y+JpZrYiqPOEmdnRriEiIiISdlaW78Ezs/pAfXdfYmY/ABYD3YEBwOfuPtLMhgO13H2YmXUDbgO6AecDf3H3883sdCALSAc8aCfN3XeY2ULgduBDYCbwhLvPMrM/FneNo/W3du3a3qRJk1L/30FERESktC1evHibu9cp7lzVsrywu28BtgTHX5rZGqAhcDXw06DYBOAdYFgQn+iRrHOBmdUMksSfAnPd/XMAM5sLdDGzd4Aa7r4giE8kkkDOOso1jqhJkyZkZWV9z1GLiIiIlD0z++RI58rtGTwzawK0JTLTVi9I/gD+C9QLjhsCm2Oq5Qaxo8Vzi4lzlGuIiIiIhFq5JHhmVh2YCtzh7rtizwWzdWW6X9rRrmFmQ8wsy8yytm7dWpbdEBERESkXZZ7gmdkJRJK7l9z91SD8WXDrtfA5vfwgngc0iqmeGMSOFk8sJn60axTh7s+6e7q7p9epU+xtbBEREQkMGjSIunXr0rp162hs2bJldOjQgeTkZK688kp27YrM5cydO5e0tDSSk5NJS0tj3rx5AOzZs4fLL7+cFi1akJSUxPDhw6Nt3XnnnaSmppKamkrz5s2pWbNm9Nw999xDUlISLVu25Pbbb6cs1xFUdmW9itaAccAad/9zzKkZQOFK2P7A9Jh4v2A1bXtgZ3Cb9U2gs5nVClbDdgbeDM7tMrP2wbX6HdJWcdcQERGR72jAgAHMnj27SGzw4MGMHDmSFStW0KNHDx577DEAateuzeuvv86KFSuYMGEC1113XbTOXXfdxdq1a1m6dCnvv/8+s2bNAmDUqFFkZ2eTnZ3NbbfdRs+ePQH497//zfvvv8/y5ctZuXIlixYtYv78+eU06sqnrGfwLgSuAy42s+zg0w0YCVxqZuuBnwXfIbIKdgOQAzwH3AwQLK74HbAo+IwoXHARlBkb1PmYyAILjnINERER+Y46derE6aefXiT20Ucf0alTJwAuvfRSpk6dCkDbtm1p0KABAElJSezdu5d9+/ZxyimncNFFFwFQrVo12rVrR25uLoeaNGkSGRkZAJgZX3/9Nfv372ffvn0cOHCAevX0eP2RlPUq2n8BdoTTlxRT3oFbjtDWeGB8MfEsoHUx8e3FXUNERERKV1JSEtOnT6d79+68/PLLbN68+bAyU6dOpV27dpx44olF4l988QWvv/46Q4cOLRL/5JNP2LhxIxdffDEAHTp04KKLLqJ+/fq4O7feeistW7Ysu0FVctrJQkRERL6X8ePH89RTT5GWlsaXX35JtWrVipxftWoVw4YN45lnnikSLygoICMjg9tvv52zzjqryLnMzEx69epFQkICADk5OaxZs4bc3Fzy8vKYN28e7733XtkOrBJTgiciIiLfS4sWLZgzZw6LFy8mIyODs88+O3ouNzeXHj16MHHixCJxgCFDhtCsWTPuuOOOw9rMzMyM3p4FmDZtGu3bt6d69epUr16drl278sEHH5TdoCo5JXgiIiLyveTnR15U8c033/D73/+eG2+8EYjcfr388ssZOXIkF154YZE6v/3tb9m5cyePP/74Ye2tXbuWHTt20KFDh2iscePGzJ8/n4KCAg4cOMD8+fN1i/YolOCJiIjIMcvIyKBDhw6sW7eOxMRExo0bx6RJk2jevDktWrSgQYMGDBw4EIDRo0eTk5PDiBEjoq8+yc/PJzc3l4cffpjVq1fTrl07UlNTGTt2bPQamZmZ9OnTh2B7eQB69erF2WefTXJyMm3atKFNmzZceeWV5T7+yqJM96KtbNLT011blYmIiEhlYGaL3T29uHNluopWREREKp8pL58X7y6UWO9fLIx3FyoU3aIVERERCRkleCIiIiIhowRPREREJGSU4ImIiIiEjBI8ERERkZBRgiciIiISMkrwREREREJGCZ6IiIhIyCjB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Y7p27Urfvn158cUXAfjlL3/J2LFjuemmm5g1axbr169n/fr1fPjhh9x00018+OGHnHLKKUycOJFmzZrx6aefkpaWxmWXXUbNmjV54YUX2Lx5M2vXrqVKlSrk5+fHedQiIlJICZ5ICJkZ1atXB+DAgQMcOHAAM6Nbt27RMueddx65ubkATJ8+nX79+mFmtG/fni+++IItW7bQvHnzaPkGDRpQt25dtm7dSs2aNRkzZgx///vfqVIlciOgbt265ThCERE5Gt2iFQmpgwcPkpqaSt26dbn00ks5//zzo+cOHDjA3/72N7p06QJAXl4ejVT55SIAABfeSURBVBo1ip5PTEwkLy+vSHsLFy5k//79nH322QB8/PHHTJ48mfT0dLp27cr69evLYVQiInIslOCJhFRCQgLZ2dnk5uaycOFCVq5cGT13880306lTJzp27HhMbW3ZsoXrrruO559/Pjpjt2/fPk466SSysrK44YYbGDRoUJmMQ0RESk4JnkjI1axZk4suuojZs2cD8NBDD7F161b+/Oc/R8s0bNiQzZs3R7/n5ubSsGFDAHbt2sXll1/Oww8/TPv27aNlEhMT6dmzJwA9evRg+fLl5TEcERE5BkrwREJo69atfPHFFwDs3buXuXPn0qJFC8aOHcubb77JpEmTojNxAFdddRUTJ07E3VmwYAGnnXYa9evXZ//+/fTo0YN+/frRq1evItfo3r07b7/9NgDz588v8ryeiIjElxZZiITQli1b6N+/PwcPHuSbb76hd+/eXHHFFVStWpUzzzyTDh06ANCzZ0/uv/9+unXrxsyZMznnnHM45ZRTeP755wGYMmUK7777Ltu3b+eFF14A4IUXXiA1NZXhw4fTt29fRo0aRfXq1Rk7dmy8hisiIodQgicSQikpKSxduvSweEFBQbHlzYwnn3zysPi1117LtddeW2ydmjVr8o9//OP7dVRERMqEEjyRSmx+p5/Euwsl9pN358e7CyIioadn8ERERERCRgmeiIiISMgowRMREREJGSV4IiIiIiGjBE9EREQkZOKS4JlZIzN728xWm9kqMxsaxB80szwzyw4+3WLq/MbMcsxsnZldFhPvEsRyzGx4TLypmX0YxCebWbXyHaWIiIhIfMRrBq8A+LW7twLaA7eYWavg3Ch3Tw0+MwGCc32AJKAL8JSZJZhZAvAk0BVoBWTEtPNo0NY5wA7g+vIanIiIiEg8xSXBc/ct7r4kOP4SWAM0PEqVq4FMd9/n7huBHOC84JPj7hvcfT+QCVxtZgZcDLwS1J8AdC+b0YiIiIhULHF/Bs/MmgBtgQ+D0K1mttzMxptZrSDWENgcUy03iB0pfgbwhbsXHBIv7vpDzCzLzLK2bt1aCiMSERERia+4JnhmVh2YCtzh7ruAMcDZQCqwBfhTWffB3Z9193R3T69Tp05ZX05E5FsNGjSIunXr0rp162jsmmuuITU1ldTUVJo0aUJqaioA+/fvZ+DAgSQnJ9OmTRveeeedaJ1JkyaRnJxMSkoKXbp0Ydu2bUdtS0TCI25blZnZCUSSu5fc/VUAd/8s5vxzwBvB1zygUUz1xCDGEeLbgZpmVjWYxYstLyJSoQ0YMIBbb72Vfv36RWOTJ0+OHv/617/mtNNOA+C5554DYMWKFeTn59O1a1cWLVrEN998w9ChQ1m9ejW1a9fmnnvuYfTo0Tz44INHbEtEwiNeq2gNGAescfc/x8TrxxTrAawMjmcAfczsRDNrCjQDFgKLgGbBitlqRBZizHB3B94GegX1+wPTy3JMIiKlpVOnTpx++unFnnN3pkyZQkZGBgCrV6/m4osvBqBu3brUrFmTrKws3B13Z/fu3bg7u3btokGDBkdtS0TCI163aC8ErgMuPuSVKH80sxVmthy4CLgTwN1XAVOA1cBs4BZ3PxjMzt0KvElkocaUoCzAMOBXZpZD5Jm8ceU4PhGRMvHee+9Rr149mjVrBkCbNm2YMWMGBQUFbNy4kcWLF7N582ZOOOEExowZQ3JyMg0aNGD16tVcf/31R21LRMIjLrdo3f1fgBVzauZR6jwMPFxMfGZx9dx9A5FVtiIioTFp0qQiM26DBg1izZo1pKenc+aZZ3LBBReQkJDAgQMHGDNmDEuXLuWss87itttu45FHHuG3v/3tEdsSkfCI2zN4IiJSMgUFBbz66qssXrw4GqtatSqjRo2Kfr/gggto3rw52dnZAJx99tkA9O7dm5EjRx61LREJj7i/JkVEpKSKW2V63333kZKSQmpqKp07d+bTTz8FYPr06dF4eno6//rXv6J17rnnHpKSkmjZsiW333477s6XX34ZXWGamppK7dq1ueOOO8p9jMX55z//SYsWLUhMTIzG9uzZw+7duwGYO3cuVatWpVWrVjRs2JDVq1dT+PqnuXPn0rJly6O2JSLhoQRPRCqdAQMGMHv27CKxu+++m+XLl5Odnc0VV1zBiBEjALjkkktYtmwZ2dnZjB8/nsGDBwPw73//m/fff5/ly5ezcuVKFi1axPz58/nBD35AdnZ29HPmmWfSs2fPch1fRkYGHTp0YN26dSQmJjJuXOQR4szMzMNuqebn59OuXTtatmzJo48+yt/+9jcAGjRowAMPPECnTp1ISUkhOzub//3f/43WK64tEQkP3aIVkUqnU6dObNq0qUisRo0a0ePdu3cTWawP1atXLzZuZnz99dfs378fd+fAgQPUq1evSJsfffQR+fn5dOzYsYxGUrxJkyYVG3/hhRcOizVp0oR169YVW/7GG2/kxhtvPOa2RCQ8lOCJSGjce++9TJw4kdNOO4233347Gp82bRq/+c1vyM/P5x//+AcAHTp04KKLLqJ+/fq4O7feemuRW5gQmeW65pproklhaXv42l7fXqgCuffFV769kIhUCLpFKyKh8fDDD7N582b69u3L6NGjo/EePXqwdu1aXnvtNe677z4AcnJyWLNmDbm5ueTl5TFv3jzee++9Iu3pNqaIVFZK8OS49Ze//IXWrVuTlJTE448/DsCyZcvo0KEDycnJXHnllezatQuAAwcO0L9/f5KTk2nZsiWPPPJItJ3Zs2dz7rnncs455xRZpSjx07dvX6ZOnXpYvFOnTmzYsIFt27Yxbdo02rdvT/Xq1alevTpdu3blgw8+iJZdtmwZBQUFpKWllWfXRURKhRI8OS6tXLmS5557joULF7Js2TLeeOMNcnJyGDx4MCNHjmTFihX06NGDxx57DICXX36Zffv2sWLFChYvXswzzzzDpk2bOHjwILfccguzZs1i9erVTJo0idWrV8d5dMen9evXR4+nT59OixYtgMhMXWRzG1iyZAn79u3jjDPOoHHjxsyfP5+CggIOHDjA/Pnzi9yi1TviRKQy0zN4clxas2YN559/PqeccgoAP/nJT3j11Vf56KOP6NSpEwCXXnopl112Gb/73e8wM3bv3k1BQQF79+6lWrVq1KhRg4ULF3LOOedw1llnAdCnTx+mT59Oq1at4ja240FGRgbvvPMO27ZtIzExkYceeoiZM2eybt06qlSpwplnnsnTTz8NwNSpU5k4cSInnHACJ598MpMnT8bM6NWrF/PmzSM5ORkzo0uXLlx55ZXRa0yZMoWZM4/47nURkQpNCZ4cl1q3bs29997L9u3bOfnkk5k5cybp6ekkJSUxffp0unfvzssvv8zmzZsB6NWrF9OnT6d+/frs2bOHUaNGcfrpp5OXl0ejRo2i7SYmJvLhhx/Ga1jHjeJWmR66DVehYcOGMWzYsMPiCQkJPPPMM0e8xoYNG757B0VE4kwJnhyXWrZsybBhw+jcuTOnnnoqqampJCQkMH78eG6//XZ+97vfcdVVV1GtWjUAFi5cSEJCAp9++ik7duygY8eO/OxnP4vzKMJv9K9fj3cXSuTWP1357YVERMqBnsGT49b111/P4sWLeffdd6lVqxbNmzenRYsWzJkzh8WLF5ORkRHd5unvf/87Xbp04YQTTqBu3bpceOGFZGVl0bBhw+gsH0Bubi4NGzaM15BEREQAJXhyHMvPzwfgP//5D6+++iq//OUvo7FvvvmG3//+99GXxDZu3Jh58+YBkZflLliwgBYtWvCjH/2I9evXs3HjRvbv309mZiZXXXVVfAYkIiISUIInx62f//zntGrViiuvvJInn3ySmjVrMmnSpOhMXoMGDRg4cCAAt9xyC1999RVJSUn86Ec/YuDAgaSkpFC1alVGjx7NZZddRsuWLenduzdJSUlxHpmIiBzv9AyehNqFf73wyCd7Qy1qAXD/6vu5f/X9UAXq3FYHgPd4jx+P/vH/le8ENTvVBOA1XuO1v74WPVVYZyYzmfnX77fy8v3b3v9e9UVERDSDJyIiIhIySvBEREREQkYJnoiISCkaNGgQdevWpXXr1tHYfffdR0pKCqmpqXTu3JlPP/0UgJdeeomUlBSSk5O54IILWLZsWbSOtkEsf8X97rKzs2nfvj2pqamkp6ezcOFCAB577DFSU1NJTU2ldevWJCQk8PnnnwPQpEkTkpOTo3XiQQmeiIhIKRowYACzZ88uErv77rtZvnw52dnZXHHFFYwYMQKApk2bMn/+fFasWMF9993HkCFDALQNYpwU97u75557eOCBB8jOzmbEiBHcc889QOR3mp2dTXZ2No888gg/+clPOP3006P13n77bbKzs8nKyirXMRRSgiciIuWquFmSQn/6058wM7Zt2wYcfYarourUqVORv+gBatSoET3evXs3ZgbABRdcQK1akcVe7du3Jzc3F6DINojVqlWLboMoZau4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\n",
      "text/plain": [
       "<Figure size 720x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "f, axarray = plt.subplots(1,1,figsize=(10,5))\n",
    "languagehist = songs.groupby(['language'],as_index=False).count()\n",
    "splot = sns.barplot(x=languagehist['language'], y=languagehist['song_id'])\n",
    "\n",
    "for i in splot.patches:\n",
    "    # get_x pulls left or right; get_height pushes up or down\n",
    "    splot.text(i.get_x()+0.1, i.get_height()+1010, i.get_height().astype(int), fontsize=10,color='black')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3、Train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>msno</th>\n",
       "      <th>song_id</th>\n",
       "      <th>source_system_tab</th>\n",
       "      <th>source_screen_name</th>\n",
       "      <th>source_type</th>\n",
       "      <th>target</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>FGtllVqz18RPiwJj/edr2gV78zirAiY/9SmYvia+kCg=</td>\n",
       "      <td>BBzumQNXUHKdEBOB7mAJuzok+IJA1c2Ryg/yzTF6tik=</td>\n",
       "      <td>explore</td>\n",
       "      <td>Explore</td>\n",
       "      <td>online-playlist</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=</td>\n",
       "      <td>bhp/MpSNoqoxOIB+/l8WPqu6jldth4DIpCm3ayXnJqM=</td>\n",
       "      <td>my library</td>\n",
       "      <td>Local playlist more</td>\n",
       "      <td>local-playlist</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=</td>\n",
       "      <td>JNWfrrC7zNN7BdMpsISKa4Mw+xVJYNnxXh3/Epw7QgY=</td>\n",
       "      <td>my library</td>\n",
       "      <td>Local playlist more</td>\n",
       "      <td>local-playlist</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=</td>\n",
       "      <td>2A87tzfnJTSWqD7gIZHisolhe4DMdzkbd6LzO1KHjNs=</td>\n",
       "      <td>my library</td>\n",
       "      <td>Local playlist more</td>\n",
       "      <td>local-playlist</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>FGtllVqz18RPiwJj/edr2gV78zirAiY/9SmYvia+kCg=</td>\n",
       "      <td>3qm6XTZ6MOCU11x8FIVbAGH5l5uMkT3/ZalWG1oo2Gc=</td>\n",
       "      <td>explore</td>\n",
       "      <td>Explore</td>\n",
       "      <td>online-playlist</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                           msno  \\\n",
       "0  FGtllVqz18RPiwJj/edr2gV78zirAiY/9SmYvia+kCg=   \n",
       "1  Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=   \n",
       "2  Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=   \n",
       "3  Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=   \n",
       "4  FGtllVqz18RPiwJj/edr2gV78zirAiY/9SmYvia+kCg=   \n",
       "\n",
       "                                        song_id source_system_tab  \\\n",
       "0  BBzumQNXUHKdEBOB7mAJuzok+IJA1c2Ryg/yzTF6tik=           explore   \n",
       "1  bhp/MpSNoqoxOIB+/l8WPqu6jldth4DIpCm3ayXnJqM=        my library   \n",
       "2  JNWfrrC7zNN7BdMpsISKa4Mw+xVJYNnxXh3/Epw7QgY=        my library   \n",
       "3  2A87tzfnJTSWqD7gIZHisolhe4DMdzkbd6LzO1KHjNs=        my library   \n",
       "4  3qm6XTZ6MOCU11x8FIVbAGH5l5uMkT3/ZalWG1oo2Gc=           explore   \n",
       "\n",
       "    source_screen_name      source_type  target  \n",
       "0              Explore  online-playlist       1  \n",
       "1  Local playlist more   local-playlist       1  \n",
       "2  Local playlist more   local-playlist       1  \n",
       "3  Local playlist more   local-playlist       1  \n",
       "4              Explore  online-playlist       1  "
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train = pd.read_csv(dpath + 'train.csv', dtype={'msno' : 'category',\n",
    "                                                'source_system_tab' : 'category',\n",
    "                                                'source_screen_name' : 'category',\n",
    "                                                'source_type' : 'category',\n",
    "                                                'target' : np.uint8})\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(7377418, 6)"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 查看Train数据缺失情况"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "msno                       0\n",
       "song_id                    0\n",
       "source_system_tab      24849\n",
       "source_screen_name    414804\n",
       "source_type            21539\n",
       "target                     0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.isnull().sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### source_system_tab、source_screen_name、source_type的取值情况"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- **source_system_tab**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(-0.25, 2219262.0, '2179252')"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(0.75, 207959.0, '167949')"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(1.75, 252276.0, '212266')"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(2.75, 3724740.0, '3684730')"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(3.75, 46195.0, '6185')"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(4.75, 516711.0, '476701')"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(5.75, 663296.0, '623286')"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(6.75, 42210.0, '2200')"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA5QAAAJNCAYAAABOcDobAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzdeZBfVZ03/vcJYRGBAYYEIQEBiZANGxIhjho2AwEXEFDBzENGQVFgRn86aGaskRk30FFZZgDLBQ2oRFxGoiKZCApCCdhIWBIgRAkmEUmEsIkEAuf3R1/6abBD0veh0yG8XlW3+n4/59xzzu2yCt+593u61FoDAAAAfTVooBcAAADAC5NACQAAQCsCJQAAAK0IlAAAALQiUAIAANDK4IFewLpum222qTvttNNALwMAAGBA3HDDDX+qtQ7prU2gXI2ddtopnZ2dA70MAACAAVFKuXtVbV55BQAAoBWBEgAAgFYESgAAAFoRKAEAAGhFoAQAAKAVgRIAAIBWBEoAAABaESgBAABoRaAEAACgFYESAACAVgRKAAAAWhEoAVhrHnvssey999551ateldGjR+fUU09NktRa87GPfSyvfOUrM3LkyJx99tlJkgcffDBvfvObu/t//etff8Z4Dz30UIYPH56TTz45SfLwww+no6Oj+9hmm23ywQ9+MEnypS99KWPHjk1HR0de97rXZd68ed3jnHbaadl1112z2267ZdasWWvjVwEA64XBA70AAF48Nt5441xxxRXZbLPN8sQTT+R1r3tdDjnkkNx2221ZtGhRbr/99gwaNChLly5NkpxzzjkZNWpUfvSjH2XZsmXZbbfdMmXKlGy00UZJkn/7t3/LxIkTu8fffPPNM2fOnO7P48aNyxFHHJEkeec735n3ve99SZKZM2fmQx/6UC677LLMmzcvM2bMyNy5c/OHP/whb3jDGzJ//vxssMEGa+vXAgAvWJ5QArDWlFKy2WabJUmeeOKJPPHEEyml5LzzzsvHP/7xDBrU9Z+loUOHdvd/+OGHU2vNI488kq233jqDB3f9W+gNN9yQe++9NwcddFCvc82fPz9Lly7N61//+iTJFlts0d325z//OaWUJMkll1ySo48+OhtvvHF23nnn7Lrrrrn++uv75xcAAOsZgRKAterJJ59MR0dHhg4dmkmTJmWfffbJb3/723znO9/J+PHjc8ghh+TOO+9Mkpx88sm57bbbsv3222fs2LE566yzMmjQoDz11FP58Ic/nM9//vOrnGfGjBl5xzve0R0ck64nnq94xSvykY98pPu12iVLlmSHHXbo7jN8+PAsWbKkn+4eANYvAiUAa9UGG2yQOXPmZPHixbn++utz6623ZsWKFdlkk03S2dmZ97znPXn3u9+dJJk1a1Y6Ojryhz/8IXPmzMnJJ5+chx56KOeee24OPfTQDB8+fJXzzJgxI8ccc8wzaieddFJ++9vf5rOf/Ww+9alP9et9AsCLge9QAjAgttxyy+y///657LLLMnz48O7vOr71rW/Nu971riTJ17/+9UybNi2llOy6667Zeeedc/vtt+dXv/pVfvnLX+bcc8/NI488kscffzybbbZZTj/99CTJTTfdlJUrV2bcuHG9zn300Ufn/e9/f5Jk2LBhWbRoUXfb4sWLM2zYsP68dQBYb3hCCcBas2zZsjzwwANJkr/85S+ZPXt2dt999xx++OH5+c9/niS58sor88pXvjJJsuOOO+byyy9Pktx777254447sssuu+Rb3/pWfv/732fhwoX5/Oc/n2OPPbY7TCbJRRdd9FdPJ59+jTZJfvKTn2TEiBFJkre85S2ZMWNGVqxYkbvuuit33nln9t577/77JQDAesQTSgDWmnvuuSdTp07Nk08+maeeeipvf/vb86Y3vSmve93rMmXKlJxxxhnZbLPN8tWvfjVJ1y6u//AP/5CxY8em1prPfvaz2WabbVY7z8UXX5xLL730GbX//u//zs9+9rNsuOGG2WqrrTJ9+vQkyejRo/P2t789o0aNyuDBg3POOefY4RUA1lCptQ70GtZp48ePr52dnQO9DAAAgAFRSrmh1jq+tzavvAIAANCKQAkAAEArAiUAAACtCJQAAAC0YpdXANbYlRP3HeglrDf2verKgV4CAPw/84QSAACAVgRKAAAAWhEoAQAAaEWgBAAAoBWBEgAAgFYESgAAAFoRKAEAAGhFoAQAAKAVgRIAAIBWBEoAAABaESgBAABoRaAEAACgFYESAACAVgRKAAAAWhEoAQAAaEWgBAAAoBWBEgAAgFYESgAAAFoRKAEAAGhFoAQAAKAVgRIAAIBWBEoAAABa6bdAWUrZpJRyfSnlplLK3FLKfzT1b5RS7iqlzGmOjqZe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BAAAoBWBEgAAgFYESgAAAFoRKAEAAGhFoAQAAKAVgRIAAIBWBEoAAABaESgBAABoRaAEAACgFYESAACAVgRKAAAAWhEoAQAAaEWgBAAAoBWBEgAAgFYESgAAAFoRKNchixYtyv77759Ro0Zl9OjROeuss5Ik3/3udzN69OgMGjQonZ2d3f2/9a1vpaOjo/sYNGhQ5syZkyT5zne+kz322COjR4/ORz/60e5rvvjFL2bUqFHZY489cuCBB+buu+/ubttggw26x3rLW97SXZ8yZUp22223jBkzJu9+97vzxBNP9PevAgAAeAEQKNchgwcPzhe+8IXMmzcv1157bc4555zMmzcvY8aMyQ9+8INMnDjxGf2nTJmSOXPmZM6cObnwwguz8847p6OjI/fdd19OOeWUXH755Zk7d27++Mc/5vLLL0+S7Lnnnuns7MzNN9+co446Kh/5yEe6x3vJS17SPd7MmTOfMc/tt9+eW265JX/5y1/y1a9+de38QgAAgHWaQLkO2W677bLXXnslSTbffPOMHDkyS5YsyciRI7Pbbrs957UXXXRRjj766CTJ7373u4wYMSJDhgxJkrzhDW/I97///STJ/vvvn0033TRJMmHChCxevHi16zr00ENTSkkpJXvvvfcaXQMAAKz/BMp11MKFC3PjjTdmn332WaP+3/nOd3LMMcckSXbdddfccccdWbhwYVauXJkf/vCHWbRo0V9d87WvfS2HHHJI9+fHHnss48ePz4QJE/LDH/7wr/o/8cQTufDCCzN58uSWdwUAAKxPBg/0AvhrjzzySI488siceeaZ2WKLLVbb/7rrrsumm26aMWPGJEm22mqrnHfeeXnHO96RQYMG5e/+7u/y29/+9hnXfPOb30xnZ2euvPLK7trdd9+dYcOG5Xe/+10OOOCAjB07Nq94xSu620888cRMnDgxr3/965+nOwUAAF7IPKFcxzzxxBM58sgjM2XKlBxxxBFrdM2MGTO6n04+7c1vfnOuu+66/OpXv8puu+2WV77yld1tP/vZz/LpT386M2fOzMYbb9xdHzZsWJJkl112yX777Zcbb7yxu+0//uM/smzZsnzxi1/8f7k9AABgPSJQrkNqrTnuuOMycuTIfOhDH1qja5566qlcfPHF3d+ffNrSpUuTJMuXL8+5556b448/Pkly44035oQTTsjMmTMzdOjQ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oAQAAKAVgRIAAJ5HDzzwQI466qjsvvvuGTlyZH71q1/llFNOye6775499tgjb33rW/PAAw8kSa6//vp0dHSko6Mjr3rVq/I///M/SZJFixZl//33z6hRozJ69OicddZZ3ePPmTMnEyZMSEdHR8aPH5/rr7++u+0Xv/hFOjo6Mnr06Oy7775r98Z5URIoAQDgefSBD3wgkydPzu23356bbropI0eOzKRJk3Lrrbfm5ptvzitf+cqcdtppSZIxY8aks7Mzc+bMyWWXXZYTTjghK1euzODBg/OFL3wh8+bNy7XXXptzzjkn8+bNS5J85CMfyamnnpo5c+bkE5/4RD7ykY8k6QqyJ554YmbOnJm5c+fmu9/97oD9DnjxECgBAOB58uCDD+aqq67KcccdlyTZaKONsuWWW+aggw7K4MGDkyQTJkzI4sWLkySbbrppd/2xxx5LKSVJst1222WvvfZKkmy++eYZOXJklixZkiQppeShhx7qnm/77bdPknz729/OEUcckR133DFJMnTo0LVxy7zICZQAAPA8ueuuuzJkyJC8613vyp577pnjjz8+f/7zn5/R5/zzz88hhxzS/fm6667L6NGjM3bs2HzpS1/qDphPW7hwYW688cbss88+SZIzzzwzp5xySnbYYYf88z//c/fTzvnz52f58uXZb7/9Mm7cuFxwwQX9fLcgUAIAwPNm5cqV+c1vfpP3v//9ufHGG/PSl740p59+enf7pz/96QwePDhTpkzpru2zzz6ZO3dufv3rX+e0007LY4891t32yCOP5Mgjj8yZZ56ZLbbYIkly3nnn5YwzzsiiRYtyxhlndD8NXblyZW644Yb85Cc/yaxZs/LJT34y8+fPX0t3zouVQAkAAM+T4cOHZ/jw4d1PE4866qj85je/SZJ84xvfyI9//ON861vf6n61taeRI0dms802y6233pokeeKJJ3LkkUdmypQpOeKII7r7TZ8+vfvz2972tu5NeYYPH56DDz44L33pS7PNNttk4sSJuemmm/r1fkGgBACA58nLXvay7LDDDrnjjjuSJJdffnlGjRqVyy67LJ/73Ocyc+bMbLrppt3977rrrqxcuTJJcvfdd+f222/PTjvtlFprjjvuuIwcOTIf+tCHnjHH9ttvnyuvvDJJcsUVV2TEiBFJksMOOyxXX311Vq5cmUcffTTXXXddRo4c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gFYESgAAAFoRKAEAAGhFoAQAAKAVgRIAAIBWBEoAAABaESgBAABoRaAEAACgFYESAACAVgRKAAAAWhEoAQAAaEWgBAAAoBWBEgAAgFYESgAAAFoRKAEAAGhFoAQAAKAVgRIAAIBWBEpgvbFo0aLsv//+GTVqVEaPHp2zzjorSfLd7343o0ePzqBBg9LZ2dndf/bs2Rk3blzGjh2bcePG5YorrkiSPProo3njG9+Y3XffPaNHj860adOeMc/FF1/cPcc73/nO7vrvf//7HHTQQRk5cmRGjRqVhQsX9v9NAwAMoMEDvQCA58vgwYPzhS98IXvttVcefvjhjBs3LpMmTcqYMWPygx/8ICeccMIz+m+zzTb50Y9+lO233z633nprDj744CxZsiRJ8s///M/Zf//98/jjj+fAAw/MT3/60xxyyCG58847c9ppp+Waa67JVlttlaVLl3aPd+yxx+ZjH/tYJk2alEceeSSDBvk3OwBg/SZQAuuN7bbbLtttt12SZPPNN8/IkSOzZMmSTJo0qdf+e+65Z/f56NGj85e//CUrVqzIpptumv333z9JstFGG2WvvfbK4sWLkyRf+cpXctJJJ2WrrbZKkgwdOjRJMm/evKxcubJ7rs0226x/bhIAYB3in8+B9dLChQtz4403Zp999lmj/t///vez1157ZeONN35G/YEHHsiPfvSjHHjggUmS+fPnZ/78+Xnta1+bCRMm5LLLLuuub7nlljniiCOy55575pRTTsmTTz75/N4UAMA6xhNKYL3zyCOP5Mgjj8yZZ56ZLbbYYrX9586dm49+9KP53//932fUV65cmWOOOSb/9E//lF122aW7duedd+YXv/hFFi9enIkTJ+aWW27JypUr88tf/jI33nhjdtxxx7zjHe/IN/7/9u40TIvqXPf4/6YBBxxwgB1jo4goMrcKGJUYcAJlS0CIwyFOoCZGox6ORnckHnXHaOIQjeIcxeCAEjUQo6ibQQwbBJmxI2CAE9BEJBEO4sD07A+1unm76YbuVngb+v5dV19dtWpV1apabw1P1aqqYcMYNGjQNllGMzMzs9rAdyjNbKeybt06+vXrx4ABAzjzzDO3mn/ZsmX07duX3/3udxx66KFlhl166aUcdthhXH311aVphYWF9O7dmwYNGnDIIYdw+OGHs3DhQgoLCykqKqJFixbUr1+fPn36MGPGjK99+czMzMxqEweUZrbTiAgGDRpE69atGTx48Fbzr1y5kl69enH77bdz/PHHlxk2ZMgQVq1axT333FMmvU+fPkyYMAGAFStWsGDBAlq0aEHnzp1ZuXIlH3/8MQDjxo2jTZs2X8+CmZmZmdVSDijNqmHgwIE0bdqUdu3alUm/7777Sj8x8ZOf/ASAp59+mqKiotK/evXqMWvWLACee+45OnToQNu2bbnuuus2m88LL7yApNJPXKxdu5aLLrqI9u3b07Fjx9KAxsqaNGkSw4cPZ9y4caXr/ZVXXuGll16isLCQyZMn06tXL3r06AHA/fffz/vvv88tt9xSmn/58uUsW7aMW2+9leLiYo466iiKiop47LHHAOjRowf77bcfbdq0oXv37txxxx3st99+FBQUcOedd3LSSSfRvn17IoJLLrkkn6vDzMzMbJvzM5Rm1XDhhRdyxRVXcP7555emjR8/nlGjRjF79mx22WWX0s9IDBgwgAEDBgAwd+5c+vTpQ1FREf/85z+59tprmT59Ok2aNOGCCy5g7NixpS99Wb16Nffee2+Zl8k8+uijpdNZvnw5p512GtOmTfNnKcrp2rUrEVHhsL59+26WNmTIEIYMGVJh/sqmI4m7776bu+++e7Nhp5xyCnPmzKlGic3MzMx2bD4bNauGE044gX333bdM2oMPPsj1119f+nbQks9I5Hr22Wc555xzAFi0aBGHHXYYTZo0AeDkk0/mhRdeKM37s5/9jOuuu45dd921NK24uJgTTzyxdPqNGzcuvXtpZmZmZpYvDijNvqIFCxbw1ltvccwxx/Cd73yHadOmbZbnueee49xzzwWgZcuWzJ8/nyVLlrB+/Xr+8Ic/sHTpUgBmzJjB0qVL6dWrV5nxO3bsyOjRo1m/fj2LFy9m+vTppeOYmZmZmeWLm7yafUXr16/nX//6F1OmTGHatGmcddZZLFq0CEkAvP322+y+++6lz13us88+PPjgg5x99tnUq1eP4447jr/+9a9s3LiRwYMHM2zYsM3mMXDgQP7yl7/QqVMnDj74YI477jgKCgq252KamZmZmW3GAaXZV1RYWMiZZ56JJLp06UK9evVYsWJFaZPWESNGlN6dLHHGGWdwxhlnAPDII49QUFDA6tWrmTdvHt26dQPgH//4B71792b06NF06tSJX//616XjH3fccRx++OHbZwHNzMzMzCrhgNLsK+rTpw/jx4+ne/fuLFiwgLVr17L//vsDsHHjRp5//nneeuutMuMsX76cpk2b8sknn/DAAw/w/PPPs/fee7NixYrSPN26dePOO++kU6dOfPbZZ0QEjRo14o033qB+/fo75Scpjr/v+K1nsiqb9ONJ+S6CmZmZ7eQcUJpVw7nnnsuECRNYsWIFhYWF3HzzzQwcOJCBAwfSrl07GjZsyJNPPlna3HXixIk0a9aMFi1alJnOVVddxezZswG48cYbt3q3cfny5fTo0YN69epx4IEHMnz48G2zgGZmZmZm1eCA0qwann322QrTn3rqqQrTu3XrxpQpU6o8nVy535ps3rw58+fPr1ohzczMzMy2E7/l1czMzMzMzGrEAaWZmZmZmZnViANKMzMzMzMzqxE/Q2l1xt9uaZ/vIuxUDrpxbr6LYGZmZmZ55juUZmZmZmZmViMOKM3MzMzMzKxGHFCamZmZmZlZjTigNDMzMzMzsxpxQGlmZmZmZmY14oDSzMzMzMzMasQBpZmZmZmZmdWIA0ozMzMzMzOrEQeUZmZmZmZmViMOKM3MzKyMlStX0r9/f4444ghat27N5MmTGTlyJG3btqVevXq88847pXnXrVvHBRdcQPv27WndujW33XZb6bDmzZvTvn17ioqK6NSpUz4WxczMtjEHlGZmZlbGVVddRc+ePXnvvfeYPXs2rVu3pl27drz44ouccMIJZfKOHDmSL7/8krlz5zJ9+nQefvhhlixZUjp8/PjxzJo1q0wQamaWL0uXLqV79+60adOGtm3bcu+99wJw7bXXcsQRR9ChQwf69u3LypUrS8e57bbbaNmyJa1ateK1114rTR8zZgytWrWiZcuW3H777dt9WWoLB5RmZmZWatWqVUycOJFBgwYB0LBhQxo3bkzr1q1p1arVZvklsWbNGtavX8/nn39Ow4YN2WuvvbZ3sc3MqqR+/frcddddFBcXM2XKFIYOHUpxcTGnnHIK8+bNY86cORx++OGlrS2Ki4sZMWIE7777LmPGjOFHP/oRGzZsYMOGDVx++eW8+uqrFBcX8+yzz1JcXJznpcsPB5RmZmZWavHixTRp0oSLLrqII488kosvvpg1a9ZUmr9///40atSIAw44gIMOOohrrrmGfffdF8iCzVNPPZWjjz6aRx55ZHstgplZpQ444ACOOuooAPbcc09at27NBx98wKmnnkr9+vUB+Na3vsWyZcsAGDVqFOeccw677LILhxxyCC1btmTq1KlMnTqVli1b0qJFCxo2bMg555zDqFGj8rZc+eSA0szMzEqtX7+eGTNmcNlllzFz5kwaNWq0xaZcU6dOpaCggA8//JDFixdz1113sWjRIgD+/Oc/M2PGDF599VWGDh3KxIkTt9dimJlt1ZIlS5g5cybHHHNMmfTHH3+c0047DYAPPviAZs2alQ4rLCzkgw8+qDS9LnJAaWZmZqUKCwspLCwsPcHq378/M2bMqDT/M888Q8+ePWnQoAFNmzbl+OOPL31e8sADDwSgadOm9O3bl6lTp277BTAzq4JPP/2Ufv36cc8995Rppn/rrbdSv359BgwYkMfS7VgcUJqZmVmpb3zjGzRr1oz58+cDMHbsWNq0aVNp/oMOOohx48YBsGbNGqZMmcIRRxzBmjVrWL16dWn666+/Trt27bb9ApiZbcW6devo168fAwYM4MwzzyxNHzZsGC+//DJPP/00koDswtjSpUtL8yxbtowDDzyw0vS6yAGlmZmZlXHfffcxYMAAOnTowKxZs/jpT3/KSy+9RGFhIZMnT6ZXr1706NEDgMsvv5xPP/2Utm3b0rlzZy666CI6dOjARx99RNeuXenYsSNdunShV69e9OzZM89LZmZ1XUQwaNAgWrduzeDBg0vTx4wZw69+9StGjx7N7rvvXpreu3dvRowYwZdffsnixYtZuHAhXbp0oXPnzixcuJDFixezdu1aRowYQe/evfOxSHlXP98FMDMzs9qlqKhos8989O3bl759+26Wd4899mDkyJGbpbdo0YLZs2dvszKamdXEpEmTGD58eOk3cgF+8YtfcOWVV/Lll19yyimnANmLeR566CHatm3LWWedRZs2bahfvz5Dhw6loKAAgPvvv58ePXqwYcMGBg4cSNu2bfO2XPnkgNLMzMzMzOqErl27EhGbpZ9++umVjnPDDTdwww03VDjOlsarK9zk1czMzMzMzGqkTgaUknpKmi/pfUnX57s8ZmZmZmZmO6I6F1BKKgCGAqcBbYBzJVX++jozMzMzMzOrUF18hrIL8H5ELAKQNAL4LlCc11KZmZl9Rff/nz/muwg7lSvuOiPfRTAzq/VU0UOpOzNJ/YGeEXFx6j8POCYirsjJcylwaeptBczf7gXd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\n",
      "text/plain": [
       "<Figure size 1080x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "f,axarray = plt.subplots(1,1,figsize=(15,10))\n",
    "train_source_system_tab_hist = train.groupby(['source_system_tab'],as_index=False).count()\n",
    "splot = sns.barplot(x=train_source_system_tab_hist['source_system_tab'], y=train_source_system_tab_hist['target'])\n",
    "for i in splot.patches:\n",
    "    # get_x pulls left or right; get_height pushes up or down\n",
    "    splot.text(i.get_x()+.15, i.get_height()+40010, i.get_height().astype(int), fontsize=10,color='black')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- **source_screen_name**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,\n",
       "        17, 18, 19]), <a list of 20 Text xticklabel objects>)"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(-0.4, 460166.0, '420156')"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(0.6, 292439.0, '252429')"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(1.6, 253668.0, '213658')"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(2.6, 284256.0, '244246')"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(3.6, 122212.0, '82202')"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(4.6, 55965.0, '15955')"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(5.6, 112352.0, '72342')"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(6.6, 3268212.0, '3228202')"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(7.6, 115990.0, '75980')"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(8.6, 46461.0, '6451')"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(9.6, 1334699.0, '1294689')"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(10.6, 241805.0, '201795')"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(11.6, 514477.0, '474467')"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(12.6, 338497.0, '298487')"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(13.6, 53492.0, '13482')"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(14.6, 53642.0, '13632')"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(15.6, 40222.0, '212')"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(16.6, 94180.0, '54170')"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(17.6, 40057.0, '47')"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(18.6, 40022.0, '12')"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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9PnPfz633HJLl9r++++fBx54IPfff38GDBjQEfYuvvjiJMns2bNz22235bTTTsvrr7/ecd6NN96YTTbZpMtYd955Z6ZOnZr77rsvDz74YE4//fQkyXXXXZdXX301s2fPzsyZM/PDH/4wc+fOzQMPPJCLL74499xzT+67777cdNNNmTNnTnd+BACsBQRKAFgH7b333tliiy261A444IC0tbUlSUaOHJn58+cnSR566KHsu+++SZI+ffqkd+/eaW9vT5K88MIL+e53v5v//b//d5exfvCDH+QrX/lKNtxww47zkqSUkhdffDHLli3Lyy+/nA022CCbbrppfvOb32SPPfbIRhttlLa2tnzqU5/KjTfe2H0fAABrBYESAN6HJk2alIMOOihJsssuu2TatGlZtmxZHnvsscycOTPz5s1Lknz1q1/Naaedlo022qjL+Y888kjuvvvu7LHHHvnUpz6Ve++9N0kyduzYbLzxxunbt2+23XbbnH766dliiy0yZMiQ3H333Xn22Wfz0ksvZfr06R1zAPD+1dbTCwAA3lvf+ta30tbWlnHjxiVZ8X3L3/zmNxkxYkQ+9rGPZc8990yvXr0ya9as/Pa3v83EiRMzd+7cLmMsW7Yszz33XGbMmJF77703n/3sZ/O73/0u99xzT3r16pUnnngiixYtyl577ZU//uM/zqBBg3LmmWfmgAMOyMYbb5xhw4alV69ePXD1AKxJ7lACwPvIZZddlptuuilXXXVVSilJkra2tkycODGzZs3K1KlTs3jx4gwYMCD//u//nvb29my33Xb55Cc/mUceeST77LNPkqR///458sgjU0rJ7rvvnvXWWy/PPPNMrr766owePTrrr79++vTpk0984hMdj88ef/zxmTlzZn72s59l8803z4ABA3rqYwBgDREoAeB94pZbbsk555yTadOmdXmE9aWXXsqLL76YJLntttvS1taWnXbaKSeddFKeeOKJzJ07Nz//+c8zYMCAjh1gDz/88Nx5551JVjz++tprr2XLLbfMtttumzvuuCNJ8uKLL2bGjBkZOHBgkuTpp59OkvzHf/xHbrzxxvzZn/3Zmrp0AHqIR14BYB109NFH56677sozzzyT/v375+tf/3omTJiQV199Nfvvv3+SFRvz/MM//EOefvrpHHjggVlvvfXSr1+/TJ48+R3HP+6443LcccdlyJAh2WCDDXL55ZenlJJTTjkl48ePz+DBg1Nrzfjx4zN06NAkyZgxY/Lss89m/fXXzwUXXJDevXt362cAQM8rtdaeXsNabcSIEfWNR3kA1jYHTR3T00tIktx82A09vQQAoJuUUmbWWkesrM0jrwAAADQiUAIAANCIQAkAAEAjAiUAAACNCJQAAAA04mdDAGAdc8j1V/X0EnLT2HE9vQQA1gLuUAIAANCIQAkAAEAjAiUAAACNCJQAAAA0IlACAADQiEAJAABAIwIlAAAAjQiUAAAANCJQAgAA0IhACQAAQCMCJQAAAI0IlAAAADQiUAIAANCIQAkAAEAjAiUAAACNCJQAAAA0IlACAADQiEAJAABAIwIlAAAAjQiUAAAANCJQAgAA0IhACQAAQCMCJQAAAI0IlAAAADQiUAIAANCIQAkAAEAjAiUAAACNCJQAAAA0IlACAADQiEAJAABAIwIlAAAAjQiUAAAANCJQAgAA0IhACQAAQCMCJQAAAI0IlAAAADQiUAIAANCIQAkAAEAjAiUAAACNCJQAAAA0IlACAADQiEAJAABAI90WKEspk0opT5dSHuhU26KUclsp5dHW381b9VJK+X4pZU4p5f5Sym6dzjm21f/RUsqxnerDSymzW+d8v5RSms4BAADA6uvOO5SXJRn9ptpXktxea90xye2t90lyUJIdW68Tk/wgWREOk3wtyR5Jdk/ytTcCYqvPf+903ugmcwAAANBMtwXKWuvPkjz3pvJhSS5vHV+e5PBO9SvqCjOS9C6l9E1yYJLbaq3P1VoXJbktyehW26a11hm11prkijeNtTpzAAAA0MCa/g7lR2utT7aO/1+Sj7aO+yWZ16nf/Fbt7erzV1JvMgcAAAAN9NimPK07i3VtnKOUcmIppb2U0r5w4cJuWBkAAMC6b00HyqfeeMy09ffpVn1Bkm069evfqr1dvf9K6k3meIta60W11hG11hFbbbXVal0gAADAB8WaDpTTkryxU+uxSaZ2qh/T2ol1ZJLnW4+t3prkgFLK5q3NeA5IcmurbUkpZWRrd9dj3jTW6swBAABAA23dNXAp5Zok+yTZspQyPyt2a/12kmtLKccneTzJZ1vdpyc5OMmcJC8lGZ8ktdbnSinfSHJvq9/f1Vrf2Ojn5KzYSfZDSW5uvbK6cwAAANBMtwXKWuvRq2jabyV9a5JTVjHOpCSTVlJvTzJkJfVnV3cOAAAAVl+PbcoDAADAuk2gBAAAoBGBEgAAgEYESgAAABoRKAEAAGhEoAQAAKARgRIAAIBGBEoAAAAaESgBAABoRKAEAACgEYESAACARgRKAAAAGhEoAQAAaESgBAAAoBGBEgAAgEYESgAAABoRKAEAAGhEoAQAAKARgRIAAIBGBEoAAAAaESgBAABoRKAEAACgEYESAACARgRKAAAAGhEoAQAAaESgBAAAoBGBEgAAgEYESgAAABoRKAEAAGhEoAQAAKARgRIAAIBGBEoAAAAaESgBAABoRKAEAACgEYESAOmVZDAAACAASURBVACARgRKAAAAGhEoAQAAaESgBAAAoBGBEgAAgEYESgAAABoRKAEAAGhEoAQAAKARgRIAAIBGBEoAAAAaESgBAABoRKAEAACgEYESAACARgRKAAAAGhEoAQAAaESgBAAAoBGBEgAAgEYESgAAABoRKAEAAGhEoAQAAKARgRIAAIBGBEoAAAAaESgBAABoRKAEAACgEYESAACARgRKAAAAGhEoAQAAaESgBAAAoBGBEgAAgEYESgAAABoRKAEAAGhEoAQASLJ8+fLsuuuuOeSQQ5Ike+21V4YNG5Zhw4Zl6623zuGHH96l/7333pu2trZcf/31XepLlixJ//7988UvfrGj9tprr+XEE0/MgAEDMnDgwNxwww1Jki9/+csdcwwYMCC9e/fu5qsEeG+19fQCAADWBuedd14GDRqUJUuWJEnuvvvujrYxY8bksMMO63i/fPnynHnmmTnggAPeMs5Xv/rV7L333l1q3/rWt9KnT5888sgjef311/Pcc88lSSZOnNjR5/zzz8+vf/3r9/SaALqbO5QAwAfe/Pnz85Of/CQnnHDCW9qWLFmSO+64o8sdyvPPPz9jxoxJnz59uvSdOXNmnnrqqbcEzUmTJuWv//qvkyTrrbdettxyy7fMc8011+Too49+Ly4HYI0RKAGAD7xTTz0155xzTtZb763/afRP//RP2W+//bLpppsmSRYsWJAf//jHOemkk7r0e/3113PaaaflO9/5Tpf64sWLk6y4c7nbbrvlM5/5TJ566qkufR5//PE89thj2Xfffd/LywLodgIlAPCBdtNNN6VPnz4ZPnz4StvffOfw1FNPzdlnn/2W8HnhhRfm4IMPTv/+/bvUly1blvnz52fPPffMr371q4waNSqnn356lz5TpkzJ2LFj06tXr/foqgDWDN+hBAA+0H7xi19k2rRpmT59el555ZUsWbIkn/vc53LllVfmmWeeyT333JMf//jHHf3b29tz1FFHJUmeeeaZTJ8+PW1tbfn3f//33H333bnwwgvzwgsv5LXXXssmm2ySCRMmZKONNsqRRx6ZJPnMZz6TSy+9tMsapkyZkgsuuGDNXTTAe0SgBAA+0CZMmJAJEyYkSe6666585zvfyZVXXpkkuf7663PIIYfkD/7gDzr6P/bYYx3Hn//853PIIYfk8MMP7/Idy8suuyzt7e359re/nST5kz/5k9x1113Zd999c/vtt2ennXbq6Pvwww9n0aJFGTVqVLdeJ0B36JFHXkspc0sps0sps0op7a3aFqWU20opj7b+bt6ql1LK90spc0op95dSdus0zrGt/o+WUo7tVB/eGn9O69zydnMAAKzMlClT3pONcs4+++ycddZZGTp0aCZPnpxzzz23yxxHHXVUWv+5ArBOKbXWNT9pKXOTjKi1PtOpdk6S52qt3y6lfCXJ5rXWM0spByf5iyQHJ9kjyXm11j1KKVskaU8yIklNMjPJ8FrrolLKPUm+lOSXSaYn+X6t9eZVzfF2ax0xYkRtb29/jz8BgPfGQVPH9PQSkiQ3H3ZDTy/hA+WQ66/q6SXkprHjenoJAKwhpZSZtdYRK2tbmzblOSzJ5a3jy5Mc3ql+RV1hRpLepZS+SQ5Mclut9bla66IktyUZ3WrbtNY6o65Iy1e8aayVzdHIm38Aedy4cfnDP/zDDBkyJMcdd1yWLl2aJKm15ktf+lJ22GGHDB06NL/61a86xhg9enR69+7dMcYbPv/5z2f77bfv+LHjWbNmdbTdddddGTZsWAYPHpxPfepT/5VLAAAAaKynAmVN8tNSysxSyomt2kdrrU+2jv9fko+2jvslmdfp3Pmt2tvV56+k/nZzdFFKObGU0l5KaV+4cOEqL+KNH0B+w7hx4/Lwww9n9uzZefnll3PJJZckSW6++eY8+uijefTRR3PRRRd12Wb8jDPOyOTJk1c6/t///d9n1qxZmTVrVoYNG5ZkxdbjJ598cqZNm5YHH3ww11133SrXBwAA0J16KlB+sta6W5KDkpxSStm7c2PrzmK3Pov7dnPUWi+qtY6otY7YaqutVnr+yn4A+eCDD04pJaWU7L777pk/f0WunTp1ao455piUUjJy5MgsXrw4Tz65Itfut99++fCHP/yu13311VfnyCOPzLbbbpskb/lBZQAAgDWlRwJlrXVB6+/TSX6cZPckT7UeV03r79Ot7guSbNPp9P6t2tvV+6+knreZY7W93Q8gL126NJMnT87o0aNXXMCCBdlmm/9cav/+/bNgwYK3nPdmf/M3f5OhQ4fmy1/+cl599dUkySOPPJJFixZln332yfDhw3PFFVc0vQQAAID/kjUeKEspG5dSPvzGcZIDkjyQZFqSN3ZqPTbJ1NbxtCTHtHZ7HZnk+dZjq7cmOaCUsnlrt9YDktzaaltSShnZ2t31mDeNtbI5Vss7/QDyySefnL333jt77bVXk+GTrNjC/OGHH869996b5557LmeffXaSFT+OPHPmzPzkJz/Jrbfemm984xt55JFHGs8DAADQVE/8DuVHk/y4tTV2W5Kra623lFLuTXJtKeX4JI8n+Wyr//Ss2OF1TpKXkoxPklrrc6WUbyS5t9Xv72qtz7WOT05yWZIPJbm59UqSb69ijtXydj+A/PWvfz0LFy7MD3/4w47+/fr1y7x5//l1z/nz56dfv34rG7pD3759kyQbbrhhxo8fn+985ztJVtzd/MhHPpKNN944G2+8cfbee+/cd999GTBgQJNLAYAPvCNu+HlPLyE/HvPJnl4CQCNr/A5lrfV3tdZdWq/BtdZvterP1lr3q7XuWGv94zfCYWt311NqrR+vte5ca23vNNakWusOrdePOtXba61DWud8sfV9yVXOsbomTJiQ+fPnZ+7cuZkyZUr23XffXHnllbnkkkty66235pprrunyKOyhhx6aK664IrXWzJgxI5tttllHYFyVN75jWWvNP/3TP2XIkCFJksMOOyw///nPs2zZsrz00kv55S9/2WVjIAAAgDWlJ+5Qvm994QtfyMc+9rGMGjUqSXLkkUfmb//2b3PwwQdn+vTp2WGHHbLRRhvlRz/qyL7Za6+98vDDD+eFF15I//79c+mll+bAAw/MuHHjsnDhwtRaM2zYsPzDP/xDkmTQoEEZPXp0hg4dmvXWWy8nnHBCR9gEAABYkwTK/6J99tkn++yzT5IV329cmVJKLrjggpW23X333Sut33HHHauc84wzzsgZZ5yxegsFAAB4j/XUz4YAAACwjhMoAQAAaESgBAAAoBGBEgAAgEYESgAAABqxy+tqWviDK3t6CUmSrU76XE8vAQAA+IBzhxIAAIBGBEoAAAAaESgBAABoRKAEAACgEYESAACARgRKAIB1wLx58/LpT386O+20UwYPHpzzzjsvSXLfffdl1KhR2XnnnfMnf/InWbJkSZJk6dKlOfbYY7Pzzjtn0KBBmTBhQpfxli9fnl133TWHHHJIR+3222/PbrvtlmHDhuWTn/xk5syZkyT58pe/nGHDhmXYsGEZMGBAevfuvYauGljbCZQAAOuAtra2nHvuuXnooYcyY8aMXHDBBXnooYdywgkn5Nvf/nZmz56dI444In//93+fJLnuuuvy6quvZvbs2Zk5c2Z++MMfZu7cuR3jnXfeeRk0aFCXOU466aRcddVVmTVrVv7sz/4s3/zmN5MkEydOzKxZszJr1qz8xV/8RY488sg1dt3A2k2gBABYB/Tt2ze77bZbkuTDH/5wBg0alAULFuSRRx7J3nvvnSTZf//9c8MNNyRJSil58cUXs2zZsrz88svZYIMNsummmyZJ5s+fn5/85Cc54YQTusxRSum4w/n8889n6623fss6rrnmmhx99NHddp3AuqWtpxcAAMDqmTt3bn79619njz32yODBgzN16tQcfvjhue666zJv3rwkydixYzN16tT07ds3L730UiZOnJgtttgiSXLqqafmnHPOye9///su415yySU5+OCD86EPfSibbrppZsyY0aX98ccfz2OPPZZ99913zVwosNZzhxIAYB3ywgsvZMyYMfne976XTTfdNJMmTcqFF16Y4cOH5/e//3022GCDJMk999yTXr165Yknnshjjz2Wc889N7/73e9y0003pU+fPhk+fPhbxp44cWKmT5+e+fPnZ/z48fmrv/qrLu1TpkzJ2LFj06tXrzVyrcDazx1KAIB1xNKlSzNmzJiMGzeu43uMAwcOzE9/+tMkySOPPJKf/OQnSZKrr746o0ePzvrrr58+ffrkE5/4RNrb2/PrX/8606ZNy/Tp0/PKK69kyZIl+dznPpeJEyfmvvvuyx577JEk+dM//dOMHj26y/xTpkzJBRdcsAavGFjbuUMJALAOqLXm+OOPz6BBg7rcOXz66aeTJK+//nq++c1v5gtf+EKSZNttt80dd9yRJHnxxRczY8aMDBw4MBMmTMj8+fMzd+7cTJkyJfvuu2+uvPLKbL755nn++efzyCOPJEluu+22Lpv2PPzww1m0aFFGjRq1pi4ZWAcIlO9jq9pe/Kyzzkq/fv06tv+ePn16khX/cAwfPjw777xzhg8f3vGPUGeHHnpohgwZ0vH+jDPOyMCBAzN06NAcccQRWbx4cZLktddey/jx47Pzzjtnl112yV133dX9FwwA72O/+MUvMnny5Nxxxx1d/g2/5pprMmDAgAwcODBbb711xo8fnyQ55ZRT8sILL2Tw4MH5oz/6o4wfPz5Dhw5d5fhtbW25+OKLM2bMmOyyyy6ZPHlyx46xyYq7k0cddVRKKd1+rcC6wyOv72NvbC++22675fe//32GDx+e/fffP8mK35M6/fTTu/Tfcsst88///M/Zeuut88ADD+TAAw/MggULOtpvvPHGbLLJJl3O2X///TNhwoS0tbXlzDPPzIQJE3L22Wfn4osvTpLMnj07Tz/9dA466KDce++9WW+9dff/YcybNy/HHHNMnnrqqZRScuKJJ+Yv//IvO9rPPffcnH766Vm4cGG23HLLjvq9996bUaNGdXzvZNasWTnppJOyZMmS9OrVK3/zN3+TP/3TP+0y15e+9KVMmjQpL7zwQkft2muvzVlnnZVSSnbZZZdcffXV3X/RAKw1PvnJT6bWutK2zv8evWGTTTbJdddd97Zj7rPPPtlnn3063h9xxBE54ogjVtr3rLPOetdrBT44BMr3sb59+6Zv375Jum4vviq77rprx/HgwYPz8ssv59VXX82GG26YF154Id/97ndz0UUX5bOf/WxHvwMOOKDjeOTIkbn++uuTJA899FDHDnB9+vRJ7969097ent133/09vcY1aVUBfaeddsq8efPy05/+NNtuu22Xc5YvX54zzzyzy+e00UYb5YorrsiOO+6YJ554IsOHD8+BBx7Y8SPR7e3tWbRoUZdxHn300UyYMCG/+MUvsvnmm3c83gQAAD1p3b1dxGrpvL14kvyf//N/MnTo0Bx33HFvCS9JcsMNN2S33XbLhhtumCT56le/mtNOOy0bbbTRKueYNGlSDjrooCTJLrvskmnTpmXZsmV57LHHMnPmzI5tzNdVq/r9r2TFHd9zzjnnLY8BnX/++RkzZkz69OnTURswYEB23HHHJMnWW2+dPn36ZOHChUlWBNAzzjgj55xzTpdxLr744pxyyinZfPPNk6TLeAAA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AOzYsYMyZcoAULp0aXbs2JH3/5zD4XA4HKcRLqB0OPIRn3/+ORdffDEXXHABBQsWpG3btnz99dcADBgwgF27dvHSSy+F3WbVqlV07dqVqVOnct555wFmp/Pnn38OXictLY1y5coFj2PdV34mMgAKMGrUqODOLsB3331H9erVqVmzJm+++WYwwOzTpw/Dhg0jISH6afd02PENcOTIEaZNm8att94KQI8ePfjhhx9ITU2lTJkyPPLIIwB06dKFpKQk6tevT58+fWjUqBEFChQgPT2dN954gxUrVvDLL79Qq1at4C5xKIFA3eFwOBx5Q3JyMjVr1qROnTrUr18/7LLhw4cjIsGa9/Xr19OwYUMKFy7Miy++GLxerHITcHXytuICSocjH3HRRRfx7bffcuDAAVSVlJQUqlatyjvvvMPs2bOZOHFiWEDzf//3f7Rt25bx48dTqVKlW2cGpAAAIABJREFU4Pjll1/Opk2b2LJlC0eOHOGDDz7g5ptvBoh5X/mZyAAowKBBg0hMTKRjx47BsSuvvJK1a9eyZMkSBg8ezKFDh5g+fTolS5akXr16MR/jdNrxnTlzJnXr1qVUqVIAlCpVigIFCpCQkMB9993H4sWLAUhMTOTll18mNTWVqVOnsmfPHipVqkRqaioAFStWRES47bbbggsnpUqVYvv27QBs376dkiVL+vAfOhwOx+nLF198QWpqKkuXLg2O/fzzz8yZM4eLLrooOFaiRAlee+01Hn300bDbZ1Vv7+rk7eT0mA06HKcJV155Je3bt6du3brUrFmTY8eO0a1bN7p3786OHTto2LAhderUYeDAgQAMHDiQ3377jQceeCBsNTExMZGRI0fSrFkzqlatym233Ub16tUBYt5XfiYyAAIYM2YM06dPZ8KECVF3wapWrUqxYsVYs2YNixYtYtq0aSQnJ3PHHXcwb9487rzzzuB1T7cd34kTJ4bt9gYCQIApU6ZQo0YNAA4cOMD+/fsBmDt3LomJiVSrVo1y5cqxbt06du3aFbwsUJt68803M3bsWADGjh3LLbfckif/k8PhcDhi8/DDDzNs2LCw78uSJUty+eWXU7BgwZi3i6y3d3XydpLotwCHw5GzDBgwgAEDBoSNhRrDhPLOO+/ENIFp0aJF0G3zRO4rPxMZAM2aNYthw4axYMECihQpEhzfsmULF154IYmJifz000+sX7+e5ORkBg8eHEzJnD9/Pi+++GKwtjWw45uSknJa7Pju37+fuXPn8tZbbwXHHn/8cVJTUxERkpOTg5ft3LmTZs2akZCQQLly5Rg/fjwAZcuW5dlnn6Vx48YULFiQ8uXLM2bMGAD69u3Lbbfdxrvvvkv58uWZNGlSnv+PDofDcboiItxwww2ICPfffz/dunVj6tSplCtXjtq1a5/0/UWWm7g6eTtxAaXD4XBkQbQAqFevXhw+fJimTZsCxpjnzTff5KuvvmLIkCEULFiQhIQEXn/9dc4///ws77979+6UL1+ehg0bAtC2bVueeeaZ3PuHfKZo0aL89ttvYWOBQDGS5ORkNmzYEPWy7t27071790zj5513HikpKX9eqMPhcDhOmq+++opy5cqxc+dOmjZtSpUqVXj++eeZM2fOSd9XoNwkWo08uDp5m3ABpcPhcGRBtABo8+bNUa/bqVMnOnXqlOX9NWnShCZNmgSPT8cdX4fD4XDkTwIGfiVLlqRNmzYsWLCALVu2BHcn09LSqFu3LosXL6Z06dJZ3le0cpNAnXyZMmVcnbxF5P/8KofDYSVdunShZMmSwXo5gP79+1OuXLmgs9uMGTMAs0rZuXNnatasSe3atZk/f37wNk2aNKFy5crB2+zcuRMwNY4XXHBBcPx06e/ocDgcfhPt/P70009Tq1Yt6tSpww033MAvv/wSdpslS5aQmJjIhx9+GBx7/PHHqV69OlWrVuWhhx5CVTlw4AAtW7akSpUqVK9enb59++aZzvnz51OnTh2qV6/OtddeC5gWUVdccQW1a9emevXqPPvss8Hrd+zYkcqVK1OjRg26dOlCenr6KWuNB/bv38++ffuCf8+ZM4fLL7+cnTt3snXrVrZu3UpSUhLLly/PNpiEzOUm4OrkbcUFlA6HwxfuueceZs2alWn84YcfDrq7BWo43377bQBWr17N3LlzeeSRRzh27FjwNhMmTAjeJnS18vbbbw+OR/Z/dDiyYs+ePbRv354qVapQtWpVvvnmm+Blkdb38+fP5+yzzw4uXoQaVUWbsDoc+Z1o5/fHHnuMVatWkZqaSqtWrcI+J0ePHuWJJ57ghhtuCI59/fXXLFq0iFWrVrFmzRqWLFnCggULAHj00UdZv349K1asYNGiRcycOTPXde7Zs4cHHniAadOmsXbtWiZPngxA4cKFmTdvHitXriQ1NZVZs2bx7bffAiagXL9+PatXr+bgwYP5fmFzx44dXH311dSuXZsrrriCli1bZtkK69dffyUpKYmXXnqJ5557jqSkJPbu3QscLzdp27Zt2G369u3L3LlzufTSS/n888//1IKCI+dwAaXD4fCFxo0bU6JEiRO67rp16/jLX/4CmDSac845J8yO3OHIaXr37k3z5s1Zv349K1euDLrIRrO+B7jmmmuCixehNbCxFk4cjvxMtPN78eLFg3/v378/rPZtxIgRtGvXLmxBUEQ4dOgQR44c4fDhw6Snp1OqVCmKFCnCddddB0ChQoWoW7cuaWlpua7z/fffp23btsHPfkCriFCsWDHA9BNOT08P3qZFixbBOr8rrrjilHX+/PPPXHfddVSrVo3q1avz6quvAjB58mSqV69OQkJC2Hfi3LlzqVevHjVr1qRevXrMmzfvlB73ZKlQoQIrV65k5cqVrF27lqeeeirTdbZu3Rr0FihdujRpaWns3buXPXv2kJaWFnz+A+UmZ599dtjtA3XymzZt4vPPPz/heUQkR48e5bLLLqNVq1aAOYcHFgXLli1L69atT+l+c5JoC5KPPfYYVapUoVatWrRp04Y9e/b4qPA4robS4chHfDg69kpgXtG+85+bPI8cOZJx48ZRv359hg8fzrnnnkvt2rWZNm0aHTp04Oeff2bZsmX8/PPPXHHFFQB07tyZAgUK0K5dO/r16xf8Mv/oo49YuHAhlSpV4uWXX+bCCy/80/+fI//zxx9/sHDhwqBzbKFChShUqBBw3Pr+RNOsGjduzNatW3NJqcMRXzz11FOMGzeOs88+my+++AKAbdu2MWXKFL744guWLFkSvG7Dhg257rrrKFOmDKpKr169ggs7Afbs2cOnn35K7969c13nxo0bSU9Pp0mTJuzbt4/evXtz1113ASY4qVevHps3b6Znz55ceeWVYfeXnp7O+PHjg4HgyZKYmMjw4cOpW7cu+/bto169ejRt2pQaNWrw8ccfc//994dd//zzz+fTTz+lbNmyrFmzhmbNmrFt27ZTeuz8yquvvkrVqlWDO6Jffvll8LJ27dpZkUp7zz330KtXr+D7DKBp06YMHjyYxMREnnjiCQYPHszQoUN9VGlwAaXD4bCGHj168PTTTyMiPP300zzyyCOMGjWKLl268P3331O/fn3Kly9Po0aN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\n",
      "text/plain": [
       "<Figure size 1080x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "f,axarray = plt.subplots(1,1,figsize=(15,10))\n",
    "train_source_screen_name_hist = train.groupby(['source_screen_name'],as_index=False).count()\n",
    "splot = sns.barplot(x=train_source_screen_name_hist['source_screen_name'], y=train_source_screen_name_hist['target'])\n",
    "# x轴坐标刻度值旋转90度\n",
    "plt.xticks(rotation=90)\n",
    "for i in splot.patches:\n",
    "    # get_x pulls left or right; get_height pushes up or down\n",
    "    splot.text(i.get_x(), i.get_height()+40010, i.get_height().astype(int), fontsize=10,color='black')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- **source_type**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11]),\n",
       " <a list of 12 Text xticklabel objects>)"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(-0.4, 517354.0, '477344')"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(0.6, 43048.0, '3038')"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(1.6, 232852.0, '192842')"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(2.6, 2301409.0, '2261399')"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(3.6, 1119513.0, '1079503')"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(4.6, 2007934.0, '1967924')"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(5.6, 523119.0, '483109')"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(6.6, 284732.0, '244722')"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(7.6, 250537.0, '210527')"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(8.6, 463624.0, '423614')"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(9.6, 51204.0, '11194')"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(10.6, 40673.0, '663')"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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ALUISgAAAGoRlAAAANQiKAEAAKhFUAIAAFCLoAQAAKAWQQkAAEAtghIAAIBaBCUAAAC1CEoAAABqEZQAAADUIigBAACoRVACAABQi6AEAACgFkEJAABALYISAACAWgQlAAAAtQhKAAAAahGUAAAA1CIoAdhknHDCCenatWv69u3bNjZjxowMGTIk/fr1y6GHHppFixa1LXvkkUcyZMiQ9OnTJ/369cvLL7+cxYsXp7m5ue21zTbb5IwzzkiS/PnPf86wYcPSv3//7LvvvmltbU2StLS0tO2nf//+ue6669aY22mnnZYtt9yynX8DALBxEZQAbDKOO+64TJ06dbWxk046Keedd15mzpyZkSNH5sILL0ySLFu2LJ/+9Kfzgx/8II899ljuvvvubL755nnPe96TlpaWttcHPvCBHHHEEUmS//N//k+OOeaYPPLII/n3f//3fPnLX06SbLHFFvnJT36Sxx57LFOnTs0ZZ5yR559/vm0O06dPz3PPPbeBfgsAsPEQlABsMoYOHZqtt956tbHHH388Q4cOTZIMHz48N954Y5LktttuS//+/TNgwIAkyXvf+9506tRpjW0XLFiQffbZJ0kya9as7L///kmS/fbbL5MnT06S7LTTTtlxxx2TJNttt126du2ap59+OkmyfPnynHXWWbngggva45QBYKMmKAHYpPXp06ct/K6//vrMnTs3yYpYLKXkgAMOyMCBA9cafBMnTswnP/nJlFKSJAMGDMjPf/7zJMmkSZOyePHiPPPMM6ttM23atPzzn//MBz/4wSTJpZdemsMOOyzdunVrt3MEgI2VoARgkzZu3LhcfvnlGTRoUBYvXpx3vOMdSVZ85PW+++7Ltddem/vuuy+TJk3KHXfcsdq2EydOzNFHH93280UXXZR77rknu+22W+6555507959taua8+fPz2c+85n8+Mc/zmabbZa//vWvuf766/O///f/3jAnCwAbmaaOngAA/Hfssssuue2225KsuCp5yy23JEl69OiRoUOHZptttkmSHHzwwXnooYcybNiwJCtu5rNs2bIMGjSobV/bbbdd2xXKF198MTfeeGM6d+6cJFm0aFEOOeSQfPOb38yee+6ZJHn44Ycze/bs9OrVK0myZMmS9OrVK7Nnz94AZw4AHa/drlCWUrYvpdxVSplVSnmslHJ6Y3zrUsrtpZQnGv92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AABqEZQAAADUIigBAACoRVACAABQi6AEgLeA5cuXZ7fddsvHPvaxJMkdd9yRgQMHprm5OXvvvXdmz56dJPnBD36Qfv36tY3PmjUrSfLMM89kv/32y5Zbbpl/+Zd/WW3fDz74YPr165devXrltNNOS1VVSZIZM2ZkyJAh6devXw499NAsWrRoA54xABsDQfkmefUf8n322SfNzc1pbm7Odtttl8MPPzxJcuGFF7aN9+3bN506dcqzzz6bl19+ObvvvnsGDBiQPn365JxzzlnjGKeddlq23HLLNcZvvPHGlFIyffr09j1JADZaF198cZ7Mz8sAACAASURBVHbddde2n08++eRce+21aWlpyac+9amce+65SZJPfepTmTlzZlpaWnL22WfnzDPPTJK8613vyje+8Y1cdNFFa+z75JNPzo9+9KM88cQTeeKJJzJ16tQkyUknnZTzzjsvM2fOzMiRI3PhhRdugDMFYGMiKN8kr/5D/pvf/CYtLS1paWnJkCFDcsQRRyRJzjrrrLbxsWPH5iMf+Ui23nrrvPOd78ydd96ZGTNmpKWlJVOnTs3999/ftr/p06fnueeeW+O4ixcvzsUXX5w99tij/U8SgI1Sa2trbrnllpx00kltY6WUtiuGL7zwQrbbbrskyVZbbdW2zt///veUUpIk7373u7P33nvnXe9612r7nj9/fhYtWpQ999wzpZQcc8wxuemmm5Ikjz/+eIYOHZokGT58eG688cb2O0kANkqC8k2wtj/kKy1atCh33nln2xXKVU2YMCFHH310khV/+FdefVy6dGmWLl3a9kd++fLlOeuss3LBBRessY+vfOUrGTNmzBr/AQDA28cZZ5yRCy64IJtt9l9/1q+88socfPDB6dGjR8aPH58vfelLbcsuu+yyfPCDH8zZZ5+dSy655DX3PW/evPTo0aPt5x49emTevHlJkj59+mTy5MlJkuuvvz5z5859M08LgE2AoHwTrO0P+Uo33XRThg0bttr/EU6SJUuWZOrUqRk1alTb2PLly9Pc3JyuXbtm+PDhbVcdL7300hx22GHp1q3bavt46KGHMnfu3BxyyCHtcFYAbAp++ctfpmvXrhk0aNBq49/5zncyZcqUtLa25vjjj2/7aGuSnHrqqfnjH/+Y888/v+2jsHWMGzcul19+eQYNGpTFixfnHe94R+19AbBpauroCWzqVv1Dfvfdd6+xfMKECWu9cvmLX/wiH/7wh7P11lu3jXXq1CktLS15/vnnM3LkyDz66KPZeuutc/3116+x71deeSVnnnlmrr766jf5jADYlPz2t7/NzTffnClTpuTll1/OokWLcsghh+T3v/992/+Y/OQnP5kDDzxwjW2POuqonHzyya+5/+7du6e1tbXt59bW1nTv3j1Jsssuu+S2225LsuLjr7fccsubdVoAbCJcofxvWvmHvGfPnjnqqKNy55135tOf/nSSZOHChZk2bdparyBOnDix7eOur9a5c+fst99+mTp1ah5++OHMnj07vXr1Ss+ePbNkyZL06tUrixcvzqOPPpp99903PXv2zP3335/DDjvMjXkA3mbGjh2b1tbWzJkzJxMnTsz++++fyZMn54UXXsjjjz+eJLn99tvbvuf/xBNPtG17yy23ZMcdd3zN/Xfr1i1bbbVV7r///lRVlZ/85Cf5+Mc/niRZsGBBkhX/k/Pcc8/NF77whfY4RQA2Yq5Q/jeNHTs2Y8eOTZLcfffdueiii/LTn/40SXLDDTfkYx/72Brfb3zhhRdyzz33tK2XJE8//XQ233zzdO7cOS+99FJuv/32jBkzJoccckj+9re/ta235ZZbtt36feHChW3j++67by666KIMHjy43c4VgE1DU1NTfvSjH2XUqFHZbLPN0qVLl4wbNy7Jiq9R/PrXv87mm2+eLl265JprrmnbrmfPnlm0aFH++c9/5qabbsptt92W3r175/LLL89xxx2Xl156KQcddFAOOuigJCs+hXPZZZclSY444ogcf/zxG/5kAehQgrIdTZw4cbWbIKw0adKkjBgxIu9+97vbxubPn59jjz02y5cvzyuvvJIjjzyy7REkALA+9t133+y7775JkpEjR2bkyJFrrHPxxRevc/s5c+asdXzw4MF59NFH1xg//fTTc/rpp9eaKwBvDR0SlKWUOUkWJ1meZFlVVYNLKVsnuS5JzyRzkhxZVdVzZcWtTi9OcnCSJUmOq6rqocZ+jk3y/zZ2e25VVdc0xgcluTrJ/0gyJcnpVVVV6zrGm3Veq/4hT7LW71QmyXHHHZfjjjtutbH+/fvn4Ycfft1jvPjii2sdX9exAAAA2ktHfodyv6qqmquqWvkZzS8luaOqqh2T3NH4OUkOSrJj4/W5JN9PkkYcnpNkjyS7JzmnlNKlsc33k3x2le0OfJ1jAAAA8AZtTDfl+XiSlV/kuCbJ4auM/6Ra4f4knUsp3ZIckOT2qqqebVxlvD3JgY1lW1VVdX9VVVWSn7xqX2s7BgAAAG9QRwVlleS2UsqDpZTPNcbeV1XV/Mb7vyV5X+N99ySrPim5tTH2WuOtaxl/rWMAAADwBnXUTXn2rqpqXimla5LbSym/X3Vh4/uOVXtO4LWO0YjczyXJ+9///vacBgAAwCarQ65QVlU1r/HvgiSTsuI7kE81Pq6axr8LGqvPS7L9Kpv3aIy91niPtYznNY7x6vn9sKqqwVVVDd52223rniYAAJuI5cuXZ7fddmu7y/7o0aOz8847p2/fvjnhhBOydOnSJMnkyZPTv3//NDc3Z/Dgwbnvvvva9vGXv/wlI0aMyK677prevXu33Tn50ksvTa9evVJKWe2xbys98MADaWpqyg033ND+Jwpvsg0elKWUd5dS3rPyfZIRSR5NcnOSYxurHZtkcuP9zUmOKSvsmeSFxsdWb00yopTSpXEznhFJbm0sW1RK2bNxh9hjXrWvtR0DAIC3sYsvvji77rpr28+jR4/O73//+8ycOTMvvfRSrrzyyiTJsGHDMmPGjLS0tGTcuHE56aST2rY55phjctZZZ+V3v/tdpk2blq5duyZJPvzhD+fXv/51PvCBD6xx3OXLl2fMmDEZMWJEO58htI+OuEL5viT3lVJmJJmW5JaqqqYmOS/J8FLKE0k+2vg5WfHYjz8lmZ3kR0lOSZKqqp5N8o0kDzReX2+MpbHOlY1t/pjkV43xdR0DAIC3qdbW1txyyy2rxeHBBx+cUkpKKdl9993T2rriFh1bbrllVlyzSP7+97+3vZ81a1aWLVuW4cOHt623xRZbJEl222239OzZc63H/t73vpdRo0a1xSdsajb4dyirqvpTkgFrGX8mybC1jFdJTl3HvsYlGbeW8elJ+q7vMQBgU/WxG67t6Cm0m19+YnRHT4G3iTPOOCMXXHBBFi9evMaypUuXZvz48bn44ovbxiZNmpQvf/nLWbBgQW655ZYkyeOPP57OnTvniCOOyJNPPpmPfvSjOe+889KpU6d1HnfevHmZNGlS7rrrrjzwwANv/onBBtBRN+V5S3j6+z/t6Cm0q21P/nRHTwEAoF398pe/TNeuXTNo0KDcfffdayw/5ZRTMnTo0Oyzzz5tYyNHjszIkSNz77335itf+Up+/etfZ9myZfnNb36Thx9+OO9///vzyU9+MldffXVOPPHEdR77jDPOyPnnn5/NNtuYnuQHb4ygBADgbeu3v/1tbr755kyZMiUvv/xyFi1alE9/+tP56U9/mq997Wt5+umnc8UVV6x126FDh+ZPf/pTFi5cmB49eqS5uTn/63/9ryTJ4Ycfnvvvv/81g3L69Ok56qijkiQLFy7MlClT0tTUlMMP96h0Nh3+dwgAAG9bY8eOTWtra+bMmZOJEydm//33z09/+tNceeWVufXWWzNhwoTVriDOnj07K76RlTz00EP5xz/+kfe+97350Ic+lOeffz5PP/10kuTOO+9M7969X/PYTz75ZObMmZM5c+bkE5/4RC6//HIxySZHUAIAwKt84QtfyFNPPZUhQ4akubk5X//615MkN954Y/r27Zvm5uaceuqpue6661JKSadOnXLRRRdl2LBh6devX6qqymc/+9kkySWXXJIePXqktbU1/fv3X+3mP7Cp85FXAABIsu+++2bfffdNkixbtmyt64wZMyZjxoxZ67Lhw4fnkUceWWP8tNNOy2mnnfaax7766qvf0FxhY+EKJQAAALUISgAAAGoRlAAAANQiKAEAAKhFUAIAAFCLoAQAAKAWQQkAAEAtnkMJAMDb1q+uW9jRU2hXB31ym46eAm9xrlACAABQi6AEAACgFkEJAABALYISAACAWgQlAAAAtQhKAAAAahGUAAAA1CIoAQAAqEVQAgAAUIugBAAAoBZBCQAAQC2CEgAAgFoEJQAAALUISgAAAGoRlAAAANQiKAEAAKhFUAIAAFCLoAQAAKAWQQkAAEAtghIAAIBaBCUAAAC1CEoAAABqEZQAAADUIigBAACoRVACAG85c+fOzX777ZfevXunT58+ufjii1db/u1vfzullCxcuHC18QceeCBNTU254YYbkiR33XVXmpub217vete7ctNNNyVJRo8enZ133jl9+/bNCSeckKVLlyZJrr322vTv3z/9+vXLXnvtlRkzZmyAMwboGIISAHjLaWpqyre//e3MmjUr999/fy677LLMmjUryYrYvO222/L+979/tW2WL1+eMWPGZMSIEW1j++23X1paWtLS0pI777wzW2yxRdvy0aNH5/e//31mzpyZl156KVdeeWWSZIcddsg999yTmTNn5itf+Uo+97nPbaCzBtjwBCUA8JbTrVu3DBw4MEnynve8J7vuumvmzZuXJPniF7+YCy64IKWU1bb53ve+l1GjRqVr165r3ecNN9yQgw46KFtssUWS5OCDD04pJaWU7L777mltbU2S7LXXXunSpUuSZM8992wbB3grEpQAwFvanDlz8vDDD2ePPfbI5MmT07179wwYMGC1debNm5dJkybl5JNPXud+Jk6cmKOPPnqN8aVLl2b8+PE58MAD11h21VVX5aCDDvrvnwTARqqpoycAANBeXnzxxYwaNSrf/e5309TUlG9961u57bbb1ljvjDPOyPnnn5/NNlv7/2ufP39+Zs6cmQMOOGCNZaecckqGDh2affbZZ7Xxu+66K1dddVXuu+++N+dkADZCghIAeEtaunRpRo0aldGjR+eII47IzJkz8+STT7ZdnWxtbc3AgQMzbdq0TJ8+PUcddVSSZOHChZkyZUqamppy+OGHJ0l+9rOfZeTIkdl8881XO8bXvva1PP3007niiitWG3/kkUdy0kkn5Ve/+lXe+973boCzBegYghIAeMupqionnnhidt1115x55plJkn79+mXBggVt6/Ts2TPTp0/PNttskyeffLJt/LjjjsvHPvaxtphMkgkTJmTs2LGrHePKK6/MrbfemjvuuGO1K5t/+ctfcsQRR2T8+PHZaaed2usUATYKvkMJALzl/Pa3v8348eNz5513tj3yY8qUKbX2NWfOnMydOzcf+chHVhv/whe+kKeeeipDhgxJc3Nzvv71rydJvv71r+eZZ57JKaeckubm5gwePPi/fT5vlnU9TuX6669Pnz59stlmm2X69OmrbTN27Nj06tUrO++8c2699da28Z49e6Zfv35rnONZZ52VXXbZJf3798/IkSPz/PPPJ1nxOJVVH8Gy2WabpaWlZQOcNdCeXKEEAN5y9t5771RV9ZrrzJkzZ63jV1999Wo/9+zZs+0OsatatmzZWre/8sor2x4hsrFZ+TiVgQMHZvHixRk0aFCGDx+evn375uc//3k+//nPr7b+rFmzMnHixDz22GP561//mo9+9KN5/PHH06lTpyQrvie6zTbbrLbN8OHDM3bs2DQ1NWXMmDEZO3Zszj///IwePTqjR49OksycOTOHH354mpubN8yJA+3GFUoAgLeJdT1OZdddd83OO++8xvqTJ0/OUUcdlXe+853ZYYcd0qtXr0ybNu01jzFixIg0Na24ZrGux6ZMmDCh7TurwKZNUAIAvA2t+jiVdZk3b1623377tp979OjRdrW2lJIRI0Zk0KBB+eEPf7jW7ceNG7fWx6Zcd911a30EC7DpEZSwAZ1wwgnp2rVr+vbt2zY2Y8aMDBkyJP369cuhhx6aRYsWJUluv/32DBo0KP369cugQYNy5513tm0zYcKE9OvXL/3798+BBx6YhQsXrnacb3/72ymltI1fe+216d+/f/r165e99torM2bM2ABnC8DGatXHqWy11Va19nHffffloYceyq9+9atcdtlluffee1db/s1vfjNNTU1tH3Nd6T//8z+zxRZbrPa3ENh0CUrYgI477rhMnTp1tbGTTjop5513XmbOnJmRI0fmwgsvTJJss802+cUvfpGZM2fmmmuuyWc+85kkK76zc/rpp+euu+7KI488kv79++fSSy9t29/cuXNz22235f3vf3/b2A477JB77rkn/397dx6n13z3f/z1TgSViARxqwQRSySRhSKUhrTNj6K2Ruw3QZUqyq3iLmr9Wav9aWxVEanad0UttdNEZI8Qa2IpGrRIc0dI8vn9cc41mUmumcTcyXzPzHk/H495ZK7vuWbmPYfrXPM5323q1KmceeaZHH300U3w25qZWREtvp1KQzp37sy7775b8/i9996jc+fONccA1llnHfbZZ586Q2FvuOEGHnjgAW666SYk1fmet956q3snzVoQF5RmTWjAgAGsueaaddpee+01BgwYAGQLGdx1110AbLnllqy33noA9OrVi7lz5zJv3jwigohgzpw5RASff/55zfMATjrpJC655JI6b+Df/va36dixI1D/fBYzM2v5qm2n0pA999yTW2+9lXnz5jFjxgxef/11tt12W+bMmcPs2bMBmDNnDo8++mhNj+PDDz/MJZdcwv33389qq61W5/stXLiQ22+/3fMnzVoQr/JqllivXr2477772Hvvvbnjjjvq3AmuuOuuu9hqq61YZZVVALj66qvp3bs3bdu2ZdNNN+XKK68EssUTOnfuXLNpdzUjRoyoOp/FzMxavsp2KpXtPgAuuOAC5s2bx/HHH89HH33E7rvvTr9+/XjkkUfo1asXQ4YMoWfPnqy00kpceeWVtG7dmn/84x/ss88+QDZy5qCDDmLXXXcF4Gc/+xnz5s1j0KBBQHYj85prrgHgmWeeYf3116dbt24JfnszWxFcUJoldv3113PCCSdw3nnnseeee7LyyivXOT5t2jSGDRvGo48+CmRDla6++momTpxIt27dOP7447nwwgs5+eSTueCCC2qeV82TTz7JiBEjeO6551bo72RmZsXU0HYqlQJxcaeffjqnn356nbZu3brVOx//jTfeqPfn77zzzowZM2YZ05pZc+CC0iyxzTffvKYIfO2113jwwQdrjr333nvss88+/PGPf2TjjTcGqNkEuvJ4yJAhXHTRRey1117MmDGjpnfyvffeY6uttmLs2LGsu+66TJkyhaOOOoq//OUvrLXWWk35K5qZNam973w8dYQV6t7B30sdwcyshgtKs8RmzZrFOuusw8KFCzn//PM55phjAPj000/Zfffdueiii9hhhx1qnt+5c2defvllPvroIzp16sRjjz1Gjx496N27N7Nmzap5XteuXRk3bhxrr70277zzDvvuuy833ngjm222WZP/jmZmZmbWMrmgNGtCBx54IE899RQff/wxXbp04ZxzzuHf//53zRzIfffdl6FDhwJwxRVX8MYbb3Duuedy7rnnAvDoo4+y3nrrcdZZZzFgwADatGnDhhtuyA033NDgzz333HP55JNP+OlPfwrASiutxLhx41bcL2pmZmZmpeCC0qwJ3XLLLVXbTzzxxCXazjjjDM4444yqzz/mmGNqejLrM3PmzJrPr7vuOq677rplD2pmZmZmtgy8bYiZmZmZmZk1igtKMzMzMzMzaxQXlGZmZmZmZtYoLijNzMzMzMysUbwoj5mZmVkJnHDPu6kjrFC/22f91BHMSsk9lGZmZmZmZtYoLijNzMzMzMysUVxQmpmZmZmZWaN4DqVZE3lkxG6pI6wwuxz5UOoIZmZmZpaAeyjNzMzMzMysUVxQmpmZmZmZWaO4oDQzMzMzM7NGcUFpZmZmZmZmjeKC0szMzMzMzBrFBaWZmZmZmZk1igtKMzMzMzMzaxQXlGZmZmZmZtYoLijNzMzMzMysUVxQmpmZmZmZWaO4oDQzMzMzM7NGcUFpZmZmZmZmjeKC0szMzMzMzBrFBaWZmZmZmZk1igtKMzMzMzMzaxQXlGZmZmZmZtYoLijNzMzMzMysUVxQmpmZmZmZWaO4oDQzMzMzM7NGcUFpZmZmZmZmjeKC0szMzMzMzBrFBaWZmZmZmZk1igtKMzMzMzMzaxQXlGZmZmZmZtYoLijNzMzMzGwJRxxxBOussw5bbLFFTdsdd9xBr169aNWqFePGjatp/+STTxg4cCDt2rXjZz/7WZ3vc9ttt9GnTx969erFsGHDlvg5d911F5LqfD9rPlxQmpmZmZnZEg4//HAefvjhOm1bbLEFd999NwMGDKjTvuqqq3Leeefx61//uk77J598wi9+8Qsef/xxpk2bxocffsjjjz9ec3z27Nlcfvnl9O/ff8X9IrZCuaC0FeKLL75g2223pW/fvvTq1YuzzjoLgBkzZtC/f3822WQT9t9/f7788ksArrnmGnr37k2/fv3YcccdefnllwH46quvOOyww+jduzc9evTgwgsvTPY7mZmZmZXJgAEDWHPNNeu09ejRg+7duy/x3LZt27Ljjjuy6qqr1ml/66232HTTTenUqRMA3//+97nrrrtqjp955pkMGzZsia8rsk8//ZTBgwez+eab06NHD0aPHg3A8OHD2XzzzenVqxennnoqAGPHjqVfv37069ePvn37cs8996SMvkK4oLQVYpVVVuGJJ55g8uTJTJo0iYcffpgxY8YwbNgwTjrpJN544w06duzIiBEjADjooIOYOnUqkyZN4tRTT+Xkk08GsmEV8+bNY+rUqYwfP57f//73zJw5M+FvZmZmZmbLapNNNuHVV19l5syZzJ8/n3vvvZd3330XgAkTJvDuu++y++67J0759Zx44onsuuuuTJ8+ncmTJ9OjRw+efPJJ7rvvPiZPnsy0adM45ZRTgKxHd9y4cTV/D//kJz9h/vz5iX+D5csFpa0QkmjXrh2Q9TJ+9dVXSOKJJ55g8ODBABx22GHce++9ALRv377ma+fMmYOkmu8zZ84c5s+fz9y5c1l55ZXrPNfMzMzMiqtjx45cffXV7L///nznO9+ha9eutG7dmoULF3LyySdz2WWXpY74tXz22Wc888wzHHnkkQCsvPLKdOjQgauvvprTTjuNVVZZBYB11lkHgNVWW42VVloJyEbwVf7GbUlcUNoKs2DBAvr168c666zDoEGD2HjjjenQoUPNi6pLly78/e9/r3n+lVdeycYbb8ypp57K7373OwAGDx5M27Zt+eY3v8kGG2zAKaecssTQCzMzMzMrrh/+8Ie88MILjB49mu7du7PZZpsxe/ZsXnrpJXbeeWe6du3KmDFj2HPPPQu/MM+MGTPo1KkTQ4cOZcstt+Soo45izpw5vPbaazz77LP079+fnXbaiRdffLHma1544QV69epF7969ueaaa2r+Fm4pXFDaCtO6dWsmTZrEe++9x9ixY5k+fXqDzz/uuON48803ufjiizn//POBbNx569atef/995kxYwaXXXYZb731VlPENzMzM7PlYNasWQD861//4qqrruKoo45ijTXW4OOPP2bmzJnMnDmT7bbbjvvvv5+tt946cdqGzZ8/nwkTJnDssccyceJE2rZty0UXXcT8+fP55z//yZgxY7j00ksZMmQIEQFA//79mTZtGi+++CIXXnghX3zxReLfYvlyQWkrXIcOHRg4cCCjR4/m008/rRk3/t5779G5c+clnn/AAQfUDIW9+eab2XXXXWnTpg3rrLMOO+ywQ+HvXJmZmZm1BAceeCDbb789r776Kl26dGHEiBHcc889dOnShdGjR7P77ruzyy671Dy/a9eunHzyydxwww106dKlZpHFE088kZ49e7LDDjtw2mmnsdlmm6X6lf7XunTpQpcuXWpWpR08eDATJkygS5cu7Lvvvkhi2223pVWrVnz88cd1vrZHjx60a9eOl156KUX0FaZl9bdaYXz00Ue0adOGDh06MHfuXB577DGGDRvGwIEDufPOOznggAMYNWoUe+21FwCvv/46m266KQAPPvhgzecbbLABTzzxBIceeihz5sxhzJgx/PznP0/2e5mZmZmVxS233FK1fZ999qnaXt/CifV9n9qeeuqpZY2V1Lrrrsv666/Pq6++Svfu3Xn88cfp2bMnG2+8MU8++SQDBw7ktdde48svv2TttddmxowZrL/++qy00kq8/fbbTJ8+na5du6b+NZYrF5S2QnzwwQccdthhLFiwgIULFzJkyBD22GMPevbsyQEHHMAZZ5zBlltuWTOh+YorruCvf/0rbdq0oWPHjowaNQrIhsEOHTqUXr16EREMHTqUPn36pPzVzMzMzKzEhg8fzsEHH8yXX35Jt27dGDlyJG3btuWII45giy22YOWVV2bUqFFI4rnnnuOiiy6iTZs2tGrViquuuoq111479a+wXLmgtBWiT58+TJw4cYn2bt26MXbs2CXaL7/88qrfp127dtxxxx3LPZ+ZmZmZWWP069ev6hSsP/3pT0u0HXrooRx66KFN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\n",
      "text/plain": [
       "<Figure size 1080x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "f,axarray = plt.subplots(1,1,figsize=(15,10))\n",
    "train_source_type_hist = train.groupby(['source_type'],as_index=False).count()\n",
    "splot = sns.barplot(x=train_source_type_hist['source_type'], y=train_source_type_hist['target'])\n",
    "plt.xticks(rotation=90)\n",
    "for i in splot.patches:\n",
    "    # get_x pulls left or right; get_height pushes up or down\n",
    "    splot.text(i.get_x(), i.get_height()+40010, i.get_height().astype(int), fontsize=10,color='black')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- **source_system_tab和source_type的特征关系**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x17bcbad30>"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "(array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11]),\n",
       " <a list of 12 Text xticklabel objects>)"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA3gAAAKmCAYAAAAfLTylAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzdeXhU5d3/8c+dsITNgEAFCgi1YctOWJtCAB+WqsUK+KNCxIBCUdZHCWCxkGJpLaClbmh9hCiioKFSrNRSi2yKQGIDBNDGJULAyBKDCUvNcv/+CJkmhEACmczkzPt1XV5nzpJzvmfwSuYz516MtVYAAAAAgNrPz9MFAAAAAACqBwEPAAAAAByCgAcAAAAADkHAAwAAAACHIOABAAAAgEMQ8AAAAADAIep4uoCqatGihe3QoYOnywAAAAAAj0hJSTlprW15qX21LuB16NBBycnJni4DAAAAADzCGPNlRftoogkAAAAADkHAAwAAAACHIOABAAAAgEPUuj54AIDaJz8/X5mZmTp//rynS0EpAQEBatu2rerWrevpUgAA1YSABwBwu8zMTDVp0kQdOnSQMcbT5UCStVanTp1SZmamOnbs6OlyAADVhCaaAAC3O3/+vJo3b0648yLGGDVv3pynqgDgMAQ8AECNINx5H/5NAMB5CHgAAAAA4BAEPAAAqklqaqo2btzo1mskJibq2LFjVzxuwIABSk5OdmstAADvQ8ADANR6BQUFni5BkncFPACAbyLgAQBq3JkzZ3TrrbcqPDxcISEhWrt2rf75z38qMjJSoaGhmjBhgv7zn/9Ikjp06KCTJ09KkpKTkzVgwABJUkJCgu6++25FR0fr7rvvVmFhoWbNmqWQkBCFhYXpqaeekiSlpKQoJiZGUVFRGjp0qL766qsK63ryySfVrVs3hYWF6ec//7mKiooUFBSkEydOSJKKior0wx/+UCdOnNAbb7yhkJAQhYeHq3///vruu+80f/58rV27VhEREVq7dq3OnDmjCRMmqFevXoqMjNRf/vIXScUh7Wc/+5kGDx6sDh066Omnn9YTTzyhyMhI9enTR9nZ2ZesLykpScnJyRo7dqwiIiJ07tw5LVy4UD179lRISIgmTZoka63r+FWrVikiIkIhISHavXv3tf2jAQBqB2ttrfovKirKAgBql4MHD5ZZT0pKsvfdd59rPScnx7Zt29Z+8skn1lpr7777bvuHP/zBWmvtjTfeaE+cOGGttXbPnj02JibGWmvtggULbPfu3e3Zs2ettdY+++yzduTIkTY/P99aa+2pU6fsd999Z/v27WuPHz9urbV2zZo1dvz48RXW2bp1a3v+/HlrrbXffPONtdbahIQEVy1///vf7YgRI6y11oaEhNjMzMwyx65cudJOmTLFdb6HH37Yrlq1ynVMUFCQzcvLsytXrrQ33XST/fbbb+3x48ftddddZ5cvX26ttXbmzJmu611KTEyM3bNnj2v91KlTrtexsbF2w4YNruNK3uOtW7fa4ODgS57v4n8bAID3k5RsK8hLPMEDANS40NBQ/eMf/9CcOXO0fft2ZWRkqGPHjurUqZMk6Z577tG2bduueJ7hw4erQYMGkqR3331Xv/jFL1SnTvEUr9dff70++eQTpaWlafDgwYqIiNBvfvMbZWZmVni+sLAwjR07Vq+88orrPBMmTNDLL78sSVqxYoXGjx8vSYqOjlZcXJxeeOEFFRYWXvJ8mzZt0mOPPaaIiAgNGDBA58+f1+HDhyVJAwcOVJMmTdSyZUsFBgbqpz/9qeu9ycjIuOK9l3jvvffUu3dvhYaGavPmzTpw4IBr31133SVJ6t+/v7799lvl5ORU+rwAgNqJic4BADWuU6dO+uijj7Rx40Y98sgjGjRoUIXH1qlTR0VFRZJUbs62Ro0aXfY61loFBwdr586dlarr7bff1rZt2/TWW29p0aJF2r9/v9q1a6cbbrhBmzdv1u7du7V69WpJ0nPPPaddu3bp7bffVlRUlFJSUi55/XXr1qlz585ltu/atUv169d3rfv5+bnW/fz8Kt2n8Pz583rggQeUnJysdu3aKSEhocx7dPE0CEyLAADOxxM8AECNO3bsmBo2bKjY2FjFx8dr586dysjI0KeffiqpuO9YTEyMpOI+eCXhad26dRWec/DgwXr++edd4Sg7O1udO3fWiRMnXAEvPz+/zBOu0oqKinTkyBENHDhQv//973X69Gnl5eVJku677z7FxsbqzjvvlL+/vyTps88+U+/evbVw4UK1bNlSR44cUZMmTZSbm+s659ChQ/XUU0+5+sX961//uur3rETpa5SEuRYtWigvL09JSUlljl27dq0kaceOHQoMDFRgYOA1Xx8A4N14ggcAqHH79+9XfHy8/Pz8VLduXS1fvlynT5/WnXfeqYKCAvXs2VOTJ0+WJC1YsED33nuvfvWrX7kGWLmU++67T//+978VFhamunXrauLEiZo6daqSkpI0ffp0nT59WgUFBZo5c6aCg4PL/XxhYaFiY2N1+vRpWWs1ffp0NW3aVFJxU9Dx48e7mmdKUnx8vNLT02Wt1c0336zw8HC1b9/e1STz4Ycf1q9+9SvNnDlTYWFhKioqUseOHfXXv/71mt67uLg4TZ48WQ0aNNDOnTs1ceJEhYSEqFWrVurZs2eZYwMCAhQZGan8/HytWLHimq4LAKgdTMm3irVFjx49LPP6AEDtcujQIXXt2tXTZVy15ORk/e///q+2b9/u6VKqXW3/twEAX2SMSbHW9rjUPp7gAQBwGY899piWL1/u6nsHAIA3I+ABAHzOlClT9P7775fZNmPGjDJNMEvMnTtXc+fOranSXKpSIwAAJQh4AACf88wzz3i6hCuqDTUCALyP20bRNMasMMYcN8akVbDfGGOeNMZ8aozZZ4zp7q5aAAAAAMAXuHOahERJwy6z/yeSgi78N0nScjfWAgAAAACO57YmmtbabcaYDpc55HZJL9viYTw/NMY0Nca0ttZ+5a6acHVmz56trKwstWrVSosXL/Z0OQAA+JSa/Dt8uWvxeQCoHTzZB+/7ko6UWs+8sK1cwDPGTFLxUz61b9++RorDf2VlZeno0aPVcq5FsaMq3DfvlaQK9wFwvqj4l6v1fClLxlX5ZxISEtS4cWN9++236t+/v/7nf/6nWmsCrkZ1/h2+lmvVZB0Arl6tGGTFWvsnSX+SiufB83A5AACHW7hwoadLkCRZa2WtlZ+fO3tUAACcxJN/MY5Kaldqve2FbQAA1JhFixapU6dO+vGPf6xPPvlEkhQXF6ekpOJWBXPnzlW3bt0UFhamWbNmSZK+/vpr3XHHHQoPD1d4eLg++OADSdITTzyhkJAQhYSEaNmyZa6fLz0iZkJCgpYuXSpJWrJkiXr27KmwsDAtWLBAkpSRkaHOnTtr3LhxCgkJ0ZEjpRu7AABweZ58grdB0lRjzBpJvSWdpv8dAKAmpaSkaM2aNUpNTVVBQYG6d++uqKgo1/5Tp07pzTff1McffyxjjHJyciRJ06dPV0xMjN58800VFhYqLy9PKSkpWrlypXbt2iVrrXr37q2YmBiNHj1aM2fO1JQpUyRJr7/+uv7+979r06ZNSk9P1+7du2Wt1fDhw7Vt2za1b99e6enpeumll9SnTx+PvC8AgNrLndMkvCZpp6TOxphMY8y9xpjJxpjJFw7ZKOlzSZ9KekHSA+6qBQCAS9m+fbvuuOMONWzYUNddd52GDx9eZn9gYKACAgJ077336s9//rMaNmwoSdq8ebPuv/9+SZK/v78CAwO1Y8cO3XHHHWrUqJEaN26sESNGaPv27YqMjNTx48d17Ngx7d27V82aNVO7du20adMmbdq0SZGRkerevbs+/vhjpaenS5JuvPFGwh0A4Kq4cxTNu66w30qa4q7rAwBwrerUqaPdu3frn//8p5KSkvT0009r8+bNVT7PnXfeqaSkJGVlZWn06NGSivvXPfzww/rFL35R5tiMjAw1atSoWuoHAPgeem0DAHxW//79tX79ep07d065ubl66623yuzPy8vT6dOndcstt+gPf/iD9u7dK0m6+eabtXx58fSthYWFOn36tPr166f169fr7NmzOnPmjN58803169dPkjR69GitWbNGSUlJuvPOOyVJQ4cO1YoVK5SXlydJOnr0qI4fP15Ttw4AcKhaMYomAMD5rmZag2vVvXt3jR49WuHh4fre976nnj17ltmfm5ur22+/XefPn5e1Vk888YQk6Y9//KMmTZqkF198Uf7+/lq+fLn69u2ruLg49erVS5J03333KTIyUpIUHBys3Nxcff/731fr1q0lSUOGDNGhQ4fUt29fSVLjxo31yiuvyN/fv6ZuHwDgQAQ8AIBPmzdvnubNm1fh/t27d5fbdsMNN+gvf/lLue0PPvigHnzwwUueZ//+/eW2zZgxQzNmzCi3PS0t7XIlAwBQIZpoAgAAAIBDEPAAAAAAwCEIeAAAAADgEAQ8AAAAAHAIBlnxIbNnz1ZWVpZatWqlxYsXe7ocAAAAANWMgOdDsrKydPToUU+XAQAAAMBNCHgAAK9weGFotZ6v/fzy0xK4y4ABA7R06VL16NGjxq4JAMCl0AcPAIAaVlhY6OkSAAAORcADAPi0V155Rb169VJERIR+8Ytf6Msvv1RQUJBOnjypoqIi9evXT5s2bVJGRoa6dOmisWPHqmvXrho1apTOnj1b7nyvvfaaQkNDFRISojlz5ri2N27cWA899JDCw8O1c+dOpaSkKCYmRlFRURo6dKi+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ZWRkqEuXLoqLi1OnTp00duxYvfvuu4qOjlZQUJB2796toqIiBQUF6cSJE5KkoqIi/fCHP3StX0pCQoKWLl3qWl+1apUiIiIUEhKi3bt3u465++67FR0drbvvvlsZGRnq16+funfvru7du+uDDz6QVDypeb9+/TR8+HB169ZN8+fP17Jly1znnjdvnv74xz+64+0BANRSfBUIAPBZn376qd544w2tWLFCPXv21KuvvqodO3Zow4YN+u1vf6v169crNjZWq1ev1syZM/Xuu+8qPDxcLVu2rPQ1zp49q9TUVG3btk0TJkxQWlqaJOngwYPasWOHGjRooLNnz+of//iHAgIClJ6errvuukvJycmSpI8++khpaWnq2LGjMjIyNGLECM2cOVNFRUVas2aNKzQCACAR8AAAPqxjx44KDQ2VJAUHB+vmm2+WMUahoaHKyMiQJE2YMEG33367Zs6cqRUrVmj8+PFVusZdd90lSerfv7++/fZb5eTkSJKGDx+uBg0aSJLy8/M1depUpaamyt/fX//+979dP9+rVy917NhRktShQwc1b95c//rXv/T1118rMjJSzZs3v6b3AADgLAQ8AIDPql+/vuu1n5+fa93Pz08FBQWSpHbt2umGG27Q5s2btXv3bq1evbpK1zDGXHK9UaNGrm1/+MMfdMMNN2jv3r0qKipSQECAa1/p4yTpvvvuU2JiorKysjRhwoQq1QIAcD764AEAcAX33XefYmNjdeedd8rf379KP7t27VpJ0o4dOxQYGKjAwMByx5w+fVqtW7eWn5+fVq1apcLCwgrPd8cdd+idd97Rnj17NHTo0KrdCADA8XiCBwDwCjU5rUFVDR8+XOPHj69y80xJCggIUGRkpPLz87VixYpLHvPAAw9o5MiRevnllzVs2LByT+1Kq1evngYOHKimTZtWOWwCAJyPgAcA8EkdOnRwDXgiFc9lV9G+vXv3Kjw8XF26dLnkueLi4hQXFyepeITMElu2bLnk8aWPkaSgoCDt27fPtf773/9ekjRgwAANGDCgzLFFRUX68MMP9cYbb1RwZwAAX0YTTQAALuOxxx7TyJEj9bvf/c7TpejgwYP64Q9/qJtvvllBQUGeLgcA4IV4ggcAwGXMnTtXc+fO9XQZkqRu3brp888/93QZAAAvRsDzAVHxL0uSmpzMlb+kwydzXdtSlozzYGUA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\n",
      "text/plain": [
       "<Figure size 1080x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "f,axarray = plt.subplots(1,1,figsize=(15,10))\n",
    "sns.barplot(x='source_type', y='target', hue='source_system_tab', data=train)\n",
    "plt.xticks(rotation=90)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4、Test"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>msno</th>\n",
       "      <th>song_id</th>\n",
       "      <th>source_system_tab</th>\n",
       "      <th>source_screen_name</th>\n",
       "      <th>source_type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>V8ruy7SGk7tDm3zA51DPpn6qutt+vmKMBKa21dp54uM=</td>\n",
       "      <td>WmHKgKMlp1lQMecNdNvDMkvIycZYHnFwDT72I5sIssc=</td>\n",
       "      <td>my library</td>\n",
       "      <td>Local playlist more</td>\n",
       "      <td>local-library</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>V8ruy7SGk7tDm3zA51DPpn6qutt+vmKMBKa21dp54uM=</td>\n",
       "      <td>y/rsZ9DC7FwK5F2PK2D5mj+aOBUJAjuu3dZ14NgE0vM=</td>\n",
       "      <td>my library</td>\n",
       "      <td>Local playlist more</td>\n",
       "      <td>local-library</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>/uQAlrAkaczV+nWCd2sPF2ekvXPRipV7q0l+gbLuxjw=</td>\n",
       "      <td>8eZLFOdGVdXBSqoAv5nsLigeH2BvKXzTQYtUM53I0k4=</td>\n",
       "      <td>discover</td>\n",
       "      <td>NaN</td>\n",
       "      <td>song-based-playlist</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>1a6oo/iXKatxQx4eS9zTVD+KlSVaAFbTIqVvwLC1Y0k=</td>\n",
       "      <td>ztCf8thYsS4YN3GcIL/bvoxLm/T5mYBVKOO4C9NiVfQ=</td>\n",
       "      <td>radio</td>\n",
       "      <td>Radio</td>\n",
       "      <td>radio</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>1a6oo/iXKatxQx4eS9zTVD+KlSVaAFbTIqVvwLC1Y0k=</td>\n",
       "      <td>MKVMpslKcQhMaFEgcEQhEfi5+RZhMYlU3eRDpySrH8Y=</td>\n",
       "      <td>radio</td>\n",
       "      <td>Radio</td>\n",
       "      <td>radio</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   id                                          msno  \\\n",
       "0   0  V8ruy7SGk7tDm3zA51DPpn6qutt+vmKMBKa21dp54uM=   \n",
       "1   1  V8ruy7SGk7tDm3zA51DPpn6qutt+vmKMBKa21dp54uM=   \n",
       "2   2  /uQAlrAkaczV+nWCd2sPF2ekvXPRipV7q0l+gbLuxjw=   \n",
       "3   3  1a6oo/iXKatxQx4eS9zTVD+KlSVaAFbTIqVvwLC1Y0k=   \n",
       "4   4  1a6oo/iXKatxQx4eS9zTVD+KlSVaAFbTIqVvwLC1Y0k=   \n",
       "\n",
       "                                        song_id source_system_tab  \\\n",
       "0  WmHKgKMlp1lQMecNdNvDMkvIycZYHnFwDT72I5sIssc=        my library   \n",
       "1  y/rsZ9DC7FwK5F2PK2D5mj+aOBUJAjuu3dZ14NgE0vM=        my library   \n",
       "2  8eZLFOdGVdXBSqoAv5nsLigeH2BvKXzTQYtUM53I0k4=          discover   \n",
       "3  ztCf8thYsS4YN3GcIL/bvoxLm/T5mYBVKOO4C9NiVfQ=             radio   \n",
       "4  MKVMpslKcQhMaFEgcEQhEfi5+RZhMYlU3eRDpySrH8Y=             radio   \n",
       "\n",
       "    source_screen_name          source_type  \n",
       "0  Local playlist more        local-library  \n",
       "1  Local playlist more        local-library  \n",
       "2                  NaN  song-based-playlist  \n",
       "3                Radio                radio  \n",
       "4                Radio                radio  "
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "(2556790, 6)"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test = pd.read_csv(dpath + 'test.csv', dtype={'msno' : 'category',\n",
    "                                                'source_system_tab' : 'category',\n",
    "                                                'source_screen_name' : 'category',\n",
    "                                                'source_type' : 'category'})\n",
    "test.head()\n",
    "test.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 查看Test数据缺失情况"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "id                         0\n",
       "msno                       0\n",
       "song_id                    0\n",
       "source_system_tab       8442\n",
       "source_screen_name    162883\n",
       "source_type             7297\n",
       "dtype: int64"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test.isnull().sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### source_system_tab、source_screen_name、source_type的取值情况"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- **source_system_tab**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(-0.25, 881078.0, '871068')"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(0.75, 76033.0, '66023')"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(1.75, 108638.0, '98628')"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(2.75, 1029502.0, '1019492')"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(3.75, 12134.0, '2124')"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(4.75, 222775.0, '212765')"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(5.75, 287625.0, '277615')"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(6.75, 10643.0, '633')"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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3Z3u7u7stdde6e7uTpJ885vf7B3v7u5Ov379cscddyRJnnnmmZx00knZb7/9sv/+++e73/1ukuTGG2/MsGHD0tbWlssvv3yl82+xxRa9xxo7duwGvHJertr6egEAALC5aGtry9lnn51hw4ZlyZIlGT58eEaNGpVvf/vbvXP+8R//Ma961auSJBMmTMiECROSJD//+c9zzDHH9MbmmWeemV133TXz5s3Ln//85zz66KNJkj333DMXXnhhPv/5z7/g/Ntss01vkMKGICgBAOAlMnDgwAwcODBJsv3226ejoyOLFi1KZ2dnkqRpmlx22WWZMWPGC/a99NJLc/zxx/e+//rXv5677747SdKvX78MGDAgSbLXXnv1jkFf818hAACsB/fdd19mz56dESNG9I7ddNNNefWrX5199933BfO//e1v54QTTkiSPP7440mST3ziExk2bFje8Y535MEHH3zRc/7xj39MT09PDj300FxxxRUv0ZXA6glKAAB4iT311FMZP358Jk+enP79+/eOX3rppb3RuKKf/OQn2XbbbTNkyJAkybJly7Jw4cL89V//dW6//fa87nWvy6mnnvqi573//vsza9asfOtb38pHP/rR/OpXv3rpLgpWQVACAMBL6Nlnn8348eMzYcKEjBs3rnd82bJlmTZtWt75zne+YJ+pU6euFJo777xztt1229793/GOd+T2229/0XMPGjQoSTJ48OC88Y1vzOzZs//Sy4E1EpQAAPASaZomEydOTEdHR0455ZSVtv3whz/M/vvvn/b29pXG//znP+eyyy5b6fuTpZS87W1vy/XXX58kufbaa3u/h7k6jz32WJ5++ukkycMPP5xbbrnlRfeBv5SgBACAl8gtt9ySSy65JDNmzOj98x1XXnllkhfehXzOjTfemD322CODBw9eafyzn/1s/uVf/iUHHHBALrnkkpx99tlJkp/+9Kdpb2/Pd77znXzwgx9MV1dXkmTu3Lnp6enJgQcemJEjR2bSpEmCkvWuNE3T12vYqPX09DSzZs1aq7nDT7t4Pa/m5eO2z727r5cAPM8Nhx3e10vYrBx+4w19vQQAWCullNuapulZ1TZ3KAEAAKgiKAEAAKgiKAEAAKjS1tcLAACAjcHcM2f09RI2Kx2nv6mvl8AG4A4lAAAAVQQlAAAAVQQlAAAAVQQlAAAAVQQlAAAAVQQlAAAAVQQlAAAAVQQlAAAAVQQlAAAAVQQlAAAAVQQlAAAAVQQlAAAAVQQlAAAAVQQlAAAAVQQlAAAAVQQlAAAAVQQlAAAAVQQlAAAAVQQlAAAAVQQlAAAAVQQlAMAmYsGCBRk5cmQ6OzvT1dWVKVOmJEm+853vpKurK/369cusWbN6519zzTUZPnx4hg4dmuHDh2fGjBlJkiVLlqS7u7v3Z8CAAfnoRz/au99ll13We453vetdveNbbLFF7z5jx47dQFcNbMza+noBAACsnba2tpx99tkZNmxYlixZkuHDh2fUqFEZMmRIpk2blg9+8LutRhwAACAASURBVIMrzR8wYEC+//3vZ/fdd89dd92V0aNHZ9GiRdl+++1zxx139M4bPnx4xo0blySZP39+PvOZz+SWW27JjjvumMWLF/fO22abbVbaD0BQAgBsIgYOHJiBAwcmSbbffvt0dHRk0aJFGTVq1CrnH3TQQb2vu7q68oc//CFPP/10tt56697xefPmZfHixfmbv/mbJMlXvvKVfPjDH86OO+6YJNl1113X1+UAmwEfeQUA2ATdd999mT17dkaMGLFW87/73e9m2LBhK8VkkkydOjXvfOc7U0pJsjww582bl9e//vU59NBDc9VVV/XO/eMf/5ienp4ceuihueKKK166iwE2We5QAgBsYp566qmMHz8+kydPTv/+/V90/i9+8Yt8/OMfzw9+8IMXbJs6dWouueSS3vfLli3L/Pnzc/3112fhwoU57LDD8vOf/zw77LBD7r///gwaNCi//vWv86Y3vSlDhw7NX/3VX72k1wZsWtyhBADYhDz77LMZP358JkyY0Pu9xzVZuHBh3v72t+fiiy9+QfzdeeedWbZsWYYPH9471t7enrFjx2bLLbfM3nvvnf322y/z589PkgwaNChJMnjw4LzxjW/M7NmzX8IrAzZFghIAYBPRNE0mTpyYjo6OnHLKKS86//HHH89b3vKWnHXWWXn961//gu2XXnppTjjhhJXGjjnmmFx//fVJkocffjjz5s3L4MGD89hjj+Xpp5/uHb/lllvS2dn5l18UsEkTlAAAm4hbbrkll1xySWbMmNH75zuuvPLK/Od//mfa29vz4x//OG95y1syevToJMkXv/jF3HPPPTnjjDN656/41NbLLrvsBUE5evTo7Lzzzuns7MzIkSPzuc99LjvvvHPmzp2bnp6eHHjggRk5cmQmTZokKIGUpmn6eg0btZ6enmbFv+e0JsNPu3g9r+bl47bPvbuvlwA8zw2HHd7XS9isHH7jDX29BOB55p45o6+XsFnpOP1Nfb0EXiKllNuapulZ1TZ3KAEAAKgiKAEAAKgiKAEAAKji71ACAGwgZ/6fY/t6CZuN079xeV8vAYg7lAAAAFQSlAAAAFTZ4EFZStmjlHJdKWVOKeUXpZSTW+M7lVKuKaXMb/3esTVeSinnllLuKaX8rJQybIVjndiaP7+UcuIK48NLKT9v7XNuKaWs6RwAAACsu764Q7ksyT82TdOZ5NAkHy6ldCaZlOTapmn2TXJt632SvDnJvq2fk5KcnyyPwySfTDIiySFJPrlCIJ6f5AMr7DemNb66cwAAALCONnhQNk3z26Zpbm+9XpJkbpJBSY5OclFr2kVJjmm9PjrJxc1ytybZoZQyMMnoJNc0TfNo0zSPJbkmyZjWtv5N09zaNE2T5OLnHWtV5wAAAGAd9el3KEspeyU5KMlPkry6aZrftjb9LsmrW68HJVmwwm4LW2NrGl+4ivGs4RzPX9dJpZRZpZRZDz300LpfGAAAwMtAnwVlKeWVSb6b5KNN0zy54rbWncVmfZ5/TedomubLTdP0NE3Ts8suu6zPZQAAAGyy+iQoSylbZnlMfrNpmmmt4QdbH1dN6/fi1viiJHussHt7a2xN4+2rGF/TOQAAAFhHffGU15Lka0nmNk3z7yts+l6S557UemKS6SuMv7v1tNdDkzzR+tjq1UmOLKXs2HoYz5FJrm5te7KUcmjrXO9+3rFWdQ4AAADWUVsfnPP1Sf4uyc9LKXe0xv4pyVlJLiulTExyf5LjWtuuTHJUknuSLE3y3iRpmubRUsqnkvy0Ne+Mpmkebb3+UJILk2yT5H9aP1nDOQAAAFhHGzwom6a5OUlZzeYjVjG/SfLh1Rzr60m+vorxWUmGrGL8kVWdAwAAgHXXp095BQAAYNMlKAEAAKgiKAEAAKgiKAEAAKgiKAEAAKgiKAEAAKgiKAEAAKgiKAEAAKgiKAEAAKgiKAEAAKgiKAEAAKgiKAEAAKgiKAEAAKgiKAEAAKgiKAEAAKgiKAEAAKgiKAEAAKgiKAEAAKgiKAEAAKgiKAEAAKgiKAEAAKgiKAEAAKgiKAEAAKgiKAEAAKgiKAEAAKgiKAEAAKgiKAEAAKgiKAEAAKgiKAEAAKgiKAEAAKgiKAEAAKgiKAEAAKgiKAEAAKgiKAEAAKgiKIHNypQpUzJkyJB0dXVl8uTJSZI77rgjhx56aLq7u9PT05OZM2f2zr/++uvT3d2drq6uHH744UmSBQsWZOTIkens7ExXV1emTJnSO39NxwIAeLlp6+sFALxU7rrrrnzlK1/JzJkzs9VWW2XMmDF561vfmo997GP55Cc/mTe/+c258sor87GPfSzXX399Hn/88XzoQx/KVVddlT333DOLFy9OkrS1teXss8/OsGHDsmTJkgwfPjyjRo1KZ2fnao8FAPBy5A4lsNmYO3duRowYkW233TZtbW05/PDDM23atJRS8uSTTyZJnnjiiey+++5Jkm9961sZN25c9txzzyTJrrvumiQZOHBghg0bliTZfvvt09HRkUWLFiXJao8FAPBy5A4lsNkYMmRITj/99DzyyCPZZpttcuWVV6anpyeTJ0/O6NGjc+qpp+bPf/5zfvSjHyVJ5s2bl2effTZvfOMbs2TJkpx88sl597vfvdIx77vvvsyePTsjRoxIktUeCwDg5cgdSmCz0dHRkY9//OM58sgjM2bMmHR3d2eLLbbI+eefn3POOScLFizIOeeck4kTJyZJli1blttuuy3//d//nauvvjqf+tSnMm/evN7jPfXUUxk/fnwmT56c/v37J8lqjwUA8HIkKIHNysSJE3PbbbflxhtvzI477pj99tsvF110UcaNG5ckecc73tH7IJ329vaMHj062223XQYMGJDDDjssd955Z5Lk2Wefzfjx4zNhwoTefZOs9lgAAC9HghLYrDz3YJ3f/OY3mTZtWt71rndl9913zw033JAkmTFjRvbdd98kydFHH52bb745y5Yty9KlS/OTn/wkHR0daZomEydOTEdHR0455ZSVjr+6YwEAvBz5DiWwWRk/fnweeeSRbLnlljnvvPOyww475Ctf+UpOPvnkLFu2LK94xSvy5S9/Ocnyj8iOGTMmBxxwQPr165f3v//9GTJkSG6++eZccsklGTp0aLq7u5Mkn/70p3PUUUet9lgAAC9HghLYrNx0000vGHvDG96Q2267bZXzTzvttJx22mkvmN80zSrnr+lYAAAvNz7yCgAAQBVBCQAAQBVBCQAAQBXfoQQ2Gq//wuv7egmbjVv+7y19vQQA4GXAHUoAAACqCEoAAACqCEoAAACqCEpYR48//niOPfbY7L///uno6MiPf/zjJMkXvvCF7L///unq6srHPvax3vmf+cxnss8+++S1r31trr766iTJggULMnLkyHR2dqarqytTpkzpnf+JT3wiBxxwQLq7u3PkkUfmgQce2LAXCAAAa8lDeWAdnXzyyRkzZkwuv/zyPPPMM1m6dGmuu+66TJ8+PXfeeWe23nrrLF68OEkyZ86cTJ06Nb/4xS/ywAMP5G//9m8zb968tLW15eyzz86wYcOyZMmSDB8+PKNGjUpnZ2dOO+20fOpTn0qSnHvuuTnjjDPypS99qS8vGQAAVskdSlgHTzzxRG688cZMnDgxSbLVVltlhx12yPnnn59JkyZl6623TpLsuuuuSZLp06fn+OOPz9Zbb5299947++yzT2bOnJmBAwdm2LBhSZLtt98+HR0dWbRoUZKkf//+vef7/e9/n1LKhrxEAABYa4IS1sG9996bXXbZJe9973tz0EEH5f3vf39+//vfZ968ebnpppsyYsSIHH744fnpT3+aJFm0aFH22GOP3v3b29t7w/E59913X2bPnp0RI0b0jp1++unZY4898s1vfjNnnHHGhrk4AABYR4IS1sGyZcty++235+///u8ze/bsbLfddjnrrLOybNmyPProo7n11lvzuc99Lscdd1yapnnR4z311FMZP358Jk+evNKdyTPPPDMLFizIhAkT8sUvfnF9XhIAAFQTlLAO2tvb097e3ns38dhjj83tt9+e9vb2jBs3LqWUHHLIIenXr18efvjhDBo0KAsWLOjdf+HChRk0aFCS5Nlnn8348eMzYcKEjBs3bpXnmzBhQr773e+u/wsDAIAKghLWwW677ZY99tgjv/zlL5Mk1157bTo7O3PMMcfkuuuuS5LMmzcvzzzzTAYMGJCxY8dm6tSpefrpp3Pvvfdm/vz5OeSQQ9I0TSZOnJiOjo6ccsopK51j/vz5va+nT5+e/ffff8NdIAAArANPeYV19IUvfCETJkzIM888k8GDB+eCCy7Idtttl/e9730ZMmRIttpqq1x00UUppaSrqyvHHXdcOjs709bWlvPOOy9bbLFFbr755lxyySUZOnRouru7kySf/vSnc9RRR2XSpEn55S9/mX79+uU1r3mNJ7wCALDREpSwjrq7uzNr1qwXjH/jG99Y5fzT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\n",
      "text/plain": [
       "<Figure size 1080x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "f,axarray = plt.subplots(1,1,figsize=(15,10))\n",
    "test_source_system_tab_hist = test.groupby(['source_system_tab'],as_index=False).count()\n",
    "splot = sns.barplot(x=test_source_system_tab_hist['source_system_tab'], y=test_source_system_tab_hist['msno'])\n",
    "for i in splot.patches:\n",
    "    # get_x pulls left or right; get_height pushes up or down\n",
    "    splot.text(i.get_x()+.15, i.get_height()+10010, i.get_height().astype(int), fontsize=10,color='black')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- **source_screen_name**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,\n",
       "        17, 18, 19, 20, 21]), <a list of 22 Text xticklabel objects>)"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(-0.4, 186139.0, '176129')"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(0.6, 121009.0, '110999')"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(1.6, 89009.0, '78999')"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(2.6, 103411.0, '93401')"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(3.6, 51627.0, '41617')"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(4.6, 15287.0, '5277')"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(5.6, 37882.0, '27872')"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(6.6, 855125.0, '845115')"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(7.6, 35569.0, '25559')"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(8.6, 12124.0, '2114')"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(9.6, 539817.0, '529807')"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(10.6, 100467.0, '90457')"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(11.6, 221211.0, '211201')"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(12.6, 131992.0, '121982')"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(13.6, 14715.0, '4705')"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(14.6, 14893.0, '4883')"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(15.6, 33630.0, '23620')"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(16.6, 10022.0, '12')"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(17.6, 10023.0, '13')"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(18.6, 10141.0, '131')"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(19.6, 10023.0, '13')"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(20.6, 10011.0, '1')"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA44AAAKnCAYAAADJIxPeAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzde7xXVZ0//tfS4w3Na+gox8IJvHA9KpOaaaME4v2CaUxTaDb2/ZZmY5nO174Ps3JymibN0SwNf2LNTzK1IDOVTJtqvoaYhImZfNUS8kJ4K8kLur5/sD0DethxtAOIz+fj8Xmcvd9r7bXW9i9f7P1Zn1JrDQAAACzPWqt6AQAAAKzeBEcAAABaCY4AAAC0EhwBAABoJTgCAADQSnAEAACgVceqXsDq4o1vfGMdOHDgql4GAADAKnHbbbf9vtbav6c2wbExcODAzJw5c1UvAwAAYJUopfxmeW1eVQUAAKCV4AgAAEArwREAAIBWgiMAAACtBEcAAABaCY4AAAC0EhwBAABoJTgCAADQSnAEAACgleAIAABAK8ER4FU655xzMnTo0AwbNiwTJkzI008/3d32kY98JBtttFH3+aWXXpr+/funq6srXV1d+drXvtbdNm7cuGy66aY56KCDlhn//PPPz6BBg1JKye9///vu+s0335xNNtmke6xPf/rTfXiXAMDrWceqXgDAa9n8+fNz3nnnZc6cOdlggw1y1FFHZcqUKTnmmGMyc+bMPPbYYy+75uijj87555//svopp5ySRYsW5atf/eoy9T333DMHHXRQ/vZv//Zl1+y111655ppr/mL3AwDQE08cAV6lxYsX509/+lMWL16cRYsWZZtttsnzzz+fU045JZ///OdXeJzRo0fnDW94w8vqO++8cwYOHPgXXDEAQO8IjgCvwoABA/Lxj388b3rTm7L11ltnk002ydixY3P++efnkEMOydZbb/2ya6666qqMGDEiRx55ZB544IFXNf//+T//JyNHjsz++++fO++881WNBQCwPIIjwKvw2GOPZerUqbnvvvvyu9/9Lk899VQuu+yyfOtb38qJJ574sv4HH3xw7r///syePTtjxozJxIkTX/Hcu+yyS37zm9/kF7/4RU488cQcdthhr+ZWAACWS3AEeBV+8IMfZLvttkv//v2zzjrr5IgjjsgZ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5pkcffTRGTRoUHbbbbfcf//9rWMB0LcERwCgVzo6OvJv//ZvmTNnTm655ZZccMEFmTNnToYNG5arr746e++99zL9119//XzmM5/JF77whZeN9fGPfzy/+tWvcvvtt+enP/1pvv/97ydJJk2alM022yxz587NP/7jP+bUU0/9s2MB0HcERwCgV7beeuvssssuSZI3vOEN2WmnnTJ//vzstNNO2WGHHV7Wf8MNN8zb3/72rL/++svU+/Xrl3322SdJsu6662aXXXbJvHnzkiRTp07NxIkTkyRHHnlkbrzxxtRalzsWAH1LcAQAXrH772U/1YMAACAASURBVL8/t99+e3bbbbdXNc7jjz+e7373uxk9enSSZP78+dl2222TLHnCuckmm2ThwoWver0AvDKCIwDwivzxj3/M+PHjc+6552bjjTd+xeMsXrw4EyZMyEc+8pH89V//9V9whQD8pQiOAECvPffccxk/fnze85735IgjjnhVYx1//PEZPHhwPvrRj3bXBgwYkAceeCDJkmD5xBNPZIsttnhV8wDwygmOAECv1Fpz3HHHZaeddsrJJ5/8qsb65Cc/mSeeeCLnnnvuMvVDDjkkkydPTpJceeWV2XfffVNKeVVzAfDKdazqBQAAry0//elP8/Wvfz3Dhw9PV1dXkuSf//mf88wzz+TEE0/MggULcuCBB6arqyvXX399kmTgwIF58skn8+yzz+Y73/lObrjhhmy88cY566yzsuOOO3ZvtnPCCSfkAx/4QI477ri8973vzaBBg7L55ptnypQp3fP3NNaQIUNW/n8IgNcRwREA6JW3v/3tqbX22Hb44Yf3WH/xdxhfannjrL/++vnWt77Vq7EA6DteVQUAAKCV4AgAAEArwREAAIBWgiMAAACtBEcAAABa2VUVAFhhh1w5dZXNPe3IQ1fZ3ACvd544AgAA0EpwBAAAoFWfBcdSyrallJtKKXNKKXeWUk5q6puXUqaXUu5p/m7W1Esp5bxSytxSyuxSyi5LjTWx6X9PKWXiUvVdSyl3NNecV0opbXMAAADQe335xHFxko/VWock2T3Jh0spQ5KcluTGWuvgJDc250myf5LBzef4JBcmS0JgkjOS7JbkrUnOWCoIXpjkH5a6blxTX94cAAAA9FKfBcda64O11p83x39IcleSAUkOTTK56TY5yWHN8aFJLqtL3JJk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+c538uyzzyZJPvWpT2Xs2LH593//9zz11FP5wQ9+8LLrr7rqquyyyy5Zb731+uQeAFYVTxwBgDXeWWedlY6OjrznPe9p7bfZZpvlwgsvzNFHH5299torAwcOzNprr50kufzyy3PMMcdk3rx5ufbaa/Pe9743L7zwQve1d955Z0499dR89atf7dN7AVgVPHEEANZol156aa655prceOONKaX82f4HH3xwDj744CTJRRdd1B0cJ02a1P0dyj322CNPP/10fv/732fLLbfMvHnzcvjhh+eyyy7LW97ylr67GYBVxBNHAGCNdd111+Xzn/98pk2bln79+q3QNY888kiS5LHHHsuXv/zlfOADH0iSvOlNb+reKOeuu+7K008/nf79++fxxx/PgQcemLPPPjt77rln39wIwComOL4G9bTd+Le+9a0MHTo0a621VmbOnLlM/8997nMZNGhQdthhh1x//fXd9S996UsZNmxYhg4dmnPPPbe7/otf/CJ77LFHhg8fnoMPPrh7I4Bnn302xx57bIYPH56RI0fm5ptv7tsbBYBemDBhQvbYY4/cfffd6ezszKRJk3LCCSfkD3/4Q8aMGZOurq78j//xP7r7Dxw4MCeffHIuvfTSdHZ2Zs6cOUmSk046KUOGDMmee+6Z0047Ldtvv32S5N/+7d9y8cUXZ+TIkZkwYUIuvfTSlFJy/vnnZ+7cufn0pz+drq6udHV1dYdPgDWFV1Vfg4455piccMIJed/73tddGzZsWK6++up88IMfXKbvnDlzMmXKlNx555353e9+l3e+85359a9/nbvuuisXX3xxZsyYkXXXXTfjxo3LQQcdlEGDBuUDH/hAvvCFL+Qd73hHLrnkkvzrv/5rPvOZz+Tiiy9Oktxxxx155JFHsv/+++fWW2/NWmv59wcAVr3LL7/8ZbXjjjtuuf3vv//+FR4nSYYMGZKf/vSnL6t/8pOfzCc/+ckVWyTAa5T/438N6mm78Z122ik77LDDy/pOnTo17373u7Peeutlu+22y6BBgzJjxozcdddd2W233dKvX790dHTkHe94R66++uokya9//evsvffeSZb8/tWL25DPmTMn++67b5Jkyy23zKabbvqyp5sAAMCaR3Bcw82fPz/bbrtt93lnZ2fmz5+fYcOG5cc//nEWLlyYRYsW5dprr80DDzyQZMlvUE2dOjXJkldgX6yPHDky06ZNy+LFi3Pffffltttu624DAADWXILj69ROO+2UU089NWPHjs24cePS1dXVvWvcJZdcki9/+cvZdddd84c//CHrrrtukiXfrezs7MyoUaPy0Y9+NG9729u6rwEAANZcvuO4hhswYMAyTwXnzZuXAQMGJFnyvY8Xv/vxv/7X/0pnZ2eSZMcdd8wNN9yQZMlrq9/73veSJB0dHTnnnHO6x3rb297WvWEAAACw5vLEcQ13yCGHZMqUKXnmmWdy33335Z577slb3/rWJP+93fhvf/vbXH311fm7v/u7ZeovvPBCPvvZz3bvQLdo0aI89dRTSZLp06eno6MjQ4YMWdm3BAAArGSeOL4GTZgwITfffHN+//vfp7OzM2eeeWY233zznHjiiVmwYEEOPPDAdHV15frrr8/QoUNz1FFHZciQIeno6MgFF1zQ/Xrp+PHjs3Dhwqyzzjq54IILsummmyZZspvcBRdckCQ54ogjcuyxxyZZEij322+/rLXWWhkwYEC+/vWvr5r/AADwEodfdfMqm/vb4/92lc0NsLIIjq9By9sm/PDDD++xfvrpp+f0009/Wf3HP/5xj/1POumknHTSSS+rDxw4MHfffXcvVgoAAKwJvKoKAABAK8GRNd6XvvSlDBs2LEOHDs25556bJPnf//t/Z8SIEenq6srYsWPzu9/9bplrbr311nR0dOTKK6/srk2ePDmDBw/O4MGDM3ny5O766aefnm233TYbbbTRyrkhAABYyQRH1mi//OUvc/HFF2fGjBn5xS9+kWuuuSZz587NKaecktmzZ2fWrFk56KCD8ulPf7r7mueff777p0pe9Oijj+bMM8/Mz372s8yYMSNnnnlmHnvssSTJwQcfnBkzZqz0ewMAgJVFcGSNdtddd2W33XZLv3790tHRkXe84x25+uqrs/HGG3f3eeqpp1JK6T7/93//94wfPz5bbrlld+3666/PmDFjsvnmm2ezzTbLmDFjct111yVJdt9992y99dYr76aA15We3pp49NFHM2bMmAwePDhjxozp/oesF/X01sTaa6+drq6udHV15ZBDDumu77XXXt31bbbZJocddtjKuTEAXlNsjvMa8/CFZ6+Sebf6n6etknlfrWHDhuX000/PwoULs8EGG+Taa6/NqFGjkix5xfSyyy7LJptskptuuilJMn/+/Hz7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PffcwnsShcyeAu2CYNmyZZx99tkAnHXWWYwbN65AH98wjAOTvCa+evfuzeLFi8nKyqJt27bcf//9AGzatInrrruO8ePH88knn/DGG2/k+zgAjzzyCC1atGDlypW0aNGCRx55xNvzNYyiggWOhmEUKX788Ufat2/PgAEDcqwgjhw5MkcQOG/ePIoXL84333zDl19+yeOPP86qVavix3/99VfGjx/PJZdcsts5HnroIUqUKEGnTp0K98mkiNyB9jPPPENGRgbdunXLMcv+5ZdfUq9ePc4880xmzpyZ4zGuuuoqMjMzeeCBB1BVAOrWrcuYMWMAePvtt9myZQsbNmxI0bMyDGN/Ja+Jr8Rr/tatWxERAEaMGMHFF19MpUqVAOJZEflNoI0bN44uXboA0KVLF8aOHZuaJ2cYRRhzVTUMD0wY5Gclq223SV7OW1Bs376d9u3b06lTQ0++pQAAIABJREFUp3gtI8COHTsYM2YMCxYsiO8bMWIErVu35qCDDqJcuXKcccYZzJ8/n6pVqwIwadIk6tevT/ny5XOcY8iQIUyYMIGpU6fGByVFmdyBds+ePenbty8iQt++fbn11lsZNGgQFSpU4L///S9HH300CxYs4KKLLuKTTz6hTJkyDB8+nIoVK7Jlyxbat2/PsGHD6Ny5M//4xz+44YYbGDJkCM2aNaNixYoUL17c91M2DGM/IvfE11133cWrr77KEUccwQcffADAihUr2L59O82bN2fLli306tWLzp075/s469ato0KFCgAcd9xxrFu3LoXPyjCKJrbiaBhGkUBV6d69O+np6dxyyy05jr3//vvUrFmTtLS0+L5KlSoxbdo0wM1Mz5kzh5o1a8aP516hBHj33Xfp378/48ePp1SpUoX4bFJDskC7fPnyFC9enGLFinH11Vczb948AA455BCOPvpoABo0aEC1atVYsWIFABUrVgTcjP1f/vKX+H2OP/54xowZw8KFC3nooYcAOPLII1P6HA3D2H9JlmHy0EMPsWbNGjp16sQzzzwDuMnDBQsW8M477/Dee+/xwAMPxK9feT1OIiKyX0wUGkZhY4GjYRhFgtmzZzNs2DCmTZu2myNoslrF66+/nh9//JFatWrRqFEjrrrqKjIyMgAXSE6ZMiXHqiXADTfcwJYtW2jZsuVuzqJFjbwC7bVr18b/fvvtt6lduzYA//vf/9i5cycAq1atYuXKlVStWpUdO3awfv16wAWiEyZMiN9n/fr1/PbbbwD069ePbt26peS5GYax/5NXhkmMTp068dZbbwGQlpbGn//8Z0qXLs0xxxxDs2bNWLRoUb6PU758+fj1cO3atfH0VsMw8sZSVQ3DKBI0bdo0XluXmyFDhuy277DDDosbJOSmdOnSSWvxPv/88z+kMSRigXadOnXivS0ffvhhRo4cSVZWFiJClSpVePHFFwGYMWMGd999NwcddBDFihXjhRdeoGzZsmzdupU///nPbN++nZ07d3LOOedw9dVXA87F8I477kBEaNasGc8++6y352sYxv5DXhNfK1eujBugjRs3Lp5FcuGFF3LDDTewY8cOfv31V+bOncvf/va3fDNVLrjgAoYOHUqfPn0YOnQoF154YeqeoGEUUSxwNAzD2A/JK9BObL+RSPv27Wnfvv1u+0uXLp2jdjSRDh060KFDhz8m1DAMIxd5TXwNHDiQ5cuXU6xYMSpXrhxvG5Senk7r1q3JyMigWLFi9OjRg9q1azNr1qykj9OmTRv69OnDpZdeysCBA6lcuTKjR4/29nwNo6hggaNhGIZhGIYRDPs68QXQu3dvevfuvVePA3D00UczderUPybUMA4wrMbRMAzDMAzDMAzDyBcLHA3DMAzDMAzDMIx8sVRVwzB2o0qVKhx++OEUL16cEiVKMH/+fHr37s2//vUvDj74YKpVq8bgwYM58sgjGT58OI899lj8vosXL+bjjz+mWrVq/OlPf4rvz87O5oorrmDAgAH7rOeJEX8ukOe1r/ztL+95Oa9hGIZhGEZo2IqjYRhJ+eCDD8jKymL+/PkAtGzZkqVLl7J48WJOPvlk+vXrBzhL9KysLLKyshg2bBgnnngimZmZHH744fH9WVlZVK5cOamlumEYxoHCzp07qVevHm3btgXgT3/6U7y90PHHH89FF10EOFfRm266iZNOOomMjAw+/vjj+GMUL148fp8LLrigUHRNnTqV+vXrk5mZSdOmTeOO0//9738566yzqFevHhkZGfGWSPPmzYtrqlu3Lm+//XaB6DIMIyxsxdEwjL2iVatW8b8bN27Mm2++udttRo4cyeWXX77b/hUrVvDdd9/lWIE0Co9zx/npPznpwhf2eJs1a9bQuXNn1q1bh4hwzTXX0KtXL9544w3uvfdePv30U+bNm0fDhg0B2LBhAx06dOCjjz6ia9eu8YbfiVxwwQWsWrWKpUuXFvhzMoyC5MknnyQ9PZ3NmzcDMHPmzPix9u3bx1tCTJo0iZUrV7Jy5Urmzp1Lz549mTt3LgCHHnooWVlZhaqrZ8+ejBs3jvT0dJ577jkefPBBhgwZwoMPPsill15Kz549WbZsGW3atGH16tXUrl2b+fPnU6JECdauXUvdunU5//zzKVHChpmGsT9h/9GGYeyGiNCqVStEhL/+9a9cc801OY4PGjSIyy67bLf7vf7664wbN263/aNGjeKyyy5DRApNs1E0KFGiBI8//jj169dny5YtNGjQgJYtW1K7dm3GjBnDX//61xy3L1myJA888ABLly5NGhiOGTOGww47LFXyDeN3k52dzTvvvMNdd93FP//5zxzHNm/ezLRp0xg8eDDgehR27twZEaFx48Zs2rSJtWvXUqFChZToEpF4EPnDDz9w/PHH57u/VKlS8cfbtm3bH7rWj35r/e++7x/l0vbHeDu3YRQFLFXVMIzdmDVrFh9//DGTJk3i2WefZcaMGfFjDz30ECVKlKBTp0457jN37lxKlSpF7dq1d3u8UaNG0bFjx0LXbYRPhQoVqF+/PgCHH3446enpfP3116Snp1OjRo3dbl+6dGmaNm1KyZIldzv2448/8s9//pO///3vha7bMP4oN998M/3796dYsd2HXmPHjqVFixaUKVMGgK+//poTTjghfjwtLY2vv/4acIFZw4YNady4MWPHji0UXa+88gpt2rQhLS2NYcOG0adPHwDuvfdeXnvtNdLS0mjTpg1PP/10/D5z586lVq1a1KlThxdeeGG/XW3s1q0b5cqVy/Fd17t3b2rWrElGRgbt2rVj06ZNQejq27cvGRkZZGZm0qpVK7755pugdX322Wc0adKEQw45hH/84x/B6EolyXSFhAWOhmHsRsWKFQEoV64c7dq1Y968eQAMGTKECRMmMHz48N1mlPMKDhctWsSOHTto0KBB4Qs3ihSrV69m4cKFnHbaab/r/n379uXWW2/NsdphGCEyYcIEypUrl+d1cOTIkXs9ufbVV18xf/58RowYwc0338wXX3xR4LqeeOIJJk6cSHZ2NldddRW33HJLXGfXrl3Jzs5m4sSJXHnllfz2228AnHbaaXzyySd89NFH9OvXj23btv1uXSHTtWtX3n33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\n",
      "text/plain": [
       "<Figure size 1080x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "f,axarray = plt.subplots(1,1,figsize=(15,10))\n",
    "test_source_screen_name_hist = test.groupby(['source_screen_name'],as_index=False).count()\n",
    "splot = sns.barplot(x=test_source_screen_name_hist['source_screen_name'], y=test_source_screen_name_hist['msno'])\n",
    "# x轴坐标刻度值旋转90度\n",
    "plt.xticks(rotation=90)\n",
    "for i in splot.patches:\n",
    "    # get_x pulls left or right; get_height pushes up or down\n",
    "    splot.text(i.get_x(), i.get_height()+10010, i.get_height().astype(int), fontsize=10,color='black')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- **source_type**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11]),\n",
       " <a list of 12 Text xticklabel objects>)"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(-0.4, 205200.0, '195190')"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(0.6, 10438.0, '428')"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(1.6, 94509.0, '84499')"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(2.6, 592356.0, '582346')"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(3.6, 304547.0, '294537')"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(4.6, 12033.0, '2023')"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(5.6, 784542.0, '774532')"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(6.6, 225174.0, '215164')"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(7.6, 139163.0, '129153')"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(8.6, 97189.0, '87179')"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(9.6, 189370.0, '179360')"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(10.6, 15092.0, '5082')"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA44AAAKmCAYAAAACf8B7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzde7hWZb0v/O+tpLZCE03cyOQKDxAC4kxIybpoWYuDlgfUSmWnedjlLvfqbPa6y8PKV1u6VtbOMktXZry61DRc5QFLMW2lCIlatgW2mkCleErBnYrc7x9zOAOdDKGcHPTzua55MZ7fuE/D/76O+7mfUmsNAAAArMpG63oBAAAArN8ERwAAAFoJjgAAALQSHAEAAGglOAIAANBKcAQAAKBVn3W9gPXFm970pjp48OB1vQwAAIB1Yvbs2Y/UWrfp6Z7g2Bg8eHBmzZq1rpcBAACwTpRSfreqe7aqAgAA0EpwBAAAoJXgCAAAQKteDY6llE+VUn5TSvl1KeXiUspmpZTtSym3lVLml1L+vZSySdN20+bz/Ob+4BXG+UJTv7eUMnGF+qSmNr+UcsIK9R7nAAAAYM31WnAspQxM8o9JxtRaRybZOMkhSb6S5Ku11p2SPJ7k6KbL0Ukeb+pfbdqllDK86TciyaQk3yylbFxK2TjJOUn2TjI8yaFN27TMAQAAwBrq7a2qfZK8vpTSJ8nfJflDkncnuby5f2GSA5rr/ZvPae6/p5RSmvoltdZnaq33J5mfZPfmb36t9b5a67NJLkmyf9NnVXMAAACwhnotONZaFyU5K8mD6QqMf0oyO8kTtdZlTbOFSQY21wOTLGj6Lmvab71i/UV9VlXfumWOlZRSPlJKmVVKmbV48eK//mEBAABexXpzq2q/dL0t3D7JdknekK6tpuuNWut5tdYxtdYx22zT4+9cAgAAvOb15lbVf0hyf611ca31uSRXJHlHki2bratJ0pFkUXO9KMmgJGnuvzHJoyvWX9RnVfVHW+YAAABgDfVmcHwwydhSyt813zt8T5J7ktyY5OCmzRFJpjXXVzWf09y/odZam/ohzamr2ycZkmRmktuTDGlOUN0kXQfoXNX0WdUcALBBuvfee9PZ2dn9t8UWW+Tss8/OBz/4we7a4MGD09nZuVK/Bx98MH379s1ZZ53VXRs8eHB22WWXdHZ2ZsyYMd31L37xixk1alQ6OzszYcKE/P73v0+STJ06NaNGjcouu+ySPffcM3feeefaeWgA1hulK2f10uClnJLkg0mWJbkjyTHp+r7hJUm2amr/tdb6TCllsyQXJXlrkseSHFJrva8Z58QkRzXjfLLWek1T3yfJ2ek6sfWCWutpTX2HnuZoW+uYMWPqrFmzXsGnB4De8fzzz2fgwIG57bbb8uY3v7m7/pnPfCZvfOMb86Uvfam7dvDBB6eUkj322COf/exnk3QFx1mzZuVNb3rTSuM++eST2WKLLZIkX//613PPPffk3HPPzX/+539m5513Tr9+/XLNNdfk5JNPzm233bYWnhSAtamUMrvWOqane316Kr5Saq0nJTnpReX70nUi6ovb/jnJ+1cxzmlJTuuhfnWSq3uo9zgHALwa/OxnP8uOO+64UmistebSSy/NDTfc0F370Y9+lO233z5veMMbVmvcF0JjkixdujRdG4aSPffcs7s+duzYLFy48G99BAA2ML39cxwAwCvskksuyaGHHrpS7eabb862226bIUOGJEmWLFmSr3zlKznppBf//9uklJIJEyZk9OjROe+881a6d+KJJ2bQoEGZOnVqTj311Jf0Pf/887P33nu/gk8DwIZAcASADcizzz6bq666Ku9//8qbdC6++OKVwuTJJ5+cT33qU+nbt+9Lxrjlllvyq1/9Ktdcc03OOeec/PznP+++d9ppp2XBggWZMmVKvvGNb6zU78Ybb8z555+fr3zlK6/wUwGwvuvVraoAwCvrmmuuyW677ZZtt922u7Zs2bJcccUVmT17dnfttttuy+WXX57jjz8+TzzxRDbaaKNsttlmOe644zJwYNfPG/fv3z+TJ0/OzJkzM27cuJXmmTJlSvbZZ5+ccsopSZK77rorxxxzTK655ppsvfXWa+FJAVifCI4AsAF58ZvFJPnpT3+aYcOGpaOjo7t28803d1+ffPLJ6du3b4477rgsXbo0y5cvz+abb56lS5dm+vTp3YfpzJs3r3ur67Rp0zJs2LAkXSezHnjggbnooosydOjQ3n5EANZDgiMAbCCWLl2a66+/Pt/+9rdXqvf0ncdVeeihhzJ58uQkXW8qDzvssEyaNClJcsIJJ+Tee+/NRhttlDe/+c0599xzkySnnnpqHn300XzsYx9LkvTp0ydOIgd4benVn+PYkPg5DgAA4LWs7ec4HI4DAABAK8ERAACAVoIjAAAArQRHAAAAWgmOAAAAtPJzHACwnnvf5VPX9RJ61Y8PnrKulwDAy/DGEQAAgFaCIwAAAK0ERwAAAFoJjgAAALQSHAEAAGglOAIAANBKcAQAAKCV4AgAAEArwREAAIBWgiMAAACtBEcAAABaCY4AAAC0EhwBAABoJTgCAADQSnAEAACgleAIAABAK8ERAACAVoIjAAAArQRHAAAAWgmOAAAAtBIcAQAAaCU4AgAA0EpwBAAAoJXgCAAAQCvBEQAAgFaCIwAAAK0ERwAAAFoJjgAAALQSHAEAAGglOAIAANBKcAQAAKCV4AgAAEArwREAAIBWgiMAAACtBEcAAABaCY4AAAC0EhwBAABoJTgCAADQSnAEAACgleAIAABAK8ERAACAVoIjAAAArQRHAAAAWgmOAAAAtBIcAQAAaCU4AgAA0KrXgmMp5S2llDkr/D1ZSvlkKWWrUsr1pZR5zb/9mvallPL1Usr8UspdpZTdVhjriKb9vFLKESvUR5dS7m76fL2UUpp6j3MAAACw5notONZa7621dtZaO5OMTvJ0kiuTnJDkZ7XWIUl+1nxOkr2TDGn+PpLkW0lXCExyUpI9kuye5KQVguC3kvy3FfpNauqrmgMAAIA1tLa2qr4nyf+ptf4uyf5JLmzqFyY5oLneP8n3a5dbk2xZShmQZGKS62utj9VaH09yfZJJzb0taq231lprku+/aKye5gAAAGANra3geEiSi5vrbWutf2iu/5hk2+Z6YJIFK/RZ2NTa6gt7qLfNsZJSykdKKbNKKbMWL168xg8FAADwWtDrwbGUskmS/ZJc9uJ7zZvC2pvzt81Raz2v1jqm1jpmm2226c1lAAAAbLDWxhvHvZP8qtb6UPP5oWabaZp/H27qi5IMWqFfR1Nrq3f0UG+bAwAAgDW0NoLjofnLNtUkuSrJCyejHpFk2gr1w5vTVccm+VOz3fS6JBNKKf2aQ3EmJLmuufdkKWVsc5rq4S8aq6c5AAAAWEN9enPwUsobkoxP8tEVymckubSUcnSS3yX5QFO/Osk+Sean6wTWI5Ok1vpYKeWfktzetDu11vpYc/2xJN9L8vok1zR/bXMAAACwhno1ONZalybZ+kW1R9N1yuqL29YkH1/FOBckuaCH+qwkI3uo9zgHAAAAa25tnaoKAADABkpwBAAAoJXgCAAAQCvBEQAAgFaCIwAAAK0ERwAAAFoJjgAAALQSHAEAAGglOAIAANBKcAQAAKCV4AgAAEArwREAAIBWgiMAAACtBEcAAABaCY4AAAC0EhwBAABoJTgCAADQSnAEAACgleAIAABAK8ERAACAVoIjAAAArQRHAAAAWgmOAAAAtBIcAQAAaCU4AgAA0EpwBAAAoJXgCAAAQCvBEQAAgFaCIwAAAK0ERwAAAFoJjgAAALQSHAEAAGglOAIAANBKcAQAAKCV4AgAAEArwREAAIBWgiMAAACtBEcAAABaCY4AAAC0EhwBAABoJTgCAADQSnAEAACgleAIAABAK8ERAACAVoIjAAAArQRHAAAAWgmOAAAAtBIcAQAAaCU4AgAA0EpwBAAAoJXgCAAAQCvBEQAAgFaCIwAAAK0ERwAAAFoJjgAAALQSHAEAAGglOAIAANBKcAQAAKBVrwbHUsqWpZTLSyn/u5Ty21LK20spW5VSri+lzGv+7de0LaWUr5dS5pdS7iql7LbCOEc07eeVUo5YoT66lHJ30+frpZTS1HucAwAAgDXX228cv5bk2lrrsCS7JvltkhOS/KzWOiTJz5rPSbJ3kiHN30eSfCvpCoFJTkqyR5Ldk5y0QhD8VpL/tkK/SU19VXMA69DgwYOzyy67pLOzM2PGjEmSzJkzJ2PHju2uzZw5M0kyderUjBo1Krvsskv23HPP3HnnnUmSP//5z9l9992z6667ZsSIETnppJNeMs8//uM/pm/fvivVLr300gwfPjwjRozIYYcd1stPCgDw6tKntwYupbwxybgkH06SWuuzSZ4tpeyf5O+bZhcmmZHk80n2T/L9WmtNcmvztnJA0/b6WutjzbjXJ5lUSpmRZIta661N/ftJDkhyTTNWT3MA69iNN96YN73pTd2fjz/++Jx00knZe++9c/XVV+f444/PjBkzsv322+emm25Kv379cs011+QjH/lIbrvttmy66aa54YYb0rdv3zz33HN55zvfmb333jtjx45NksyaNSuPP/74SnPOmzcvp59+en7xi1+kX79+efjhh9fqMwMAbOh6843j9kkWJ/m3UsodpZTvllLekGTbWusfmjZ/TLJtcz0wyYIV+i9sam31hT3U0zLHSkopHymlzCqlzFq8ePFf84zA36iUkieffDJJ8qc//SnbbbddkmTPPfdMv35dmwvGjh2bhQsXdrd/4W3ic889l+eeey7NLvU8//zz+dznPpd//ud/XmmO73znO/n4xz/ePV7//v17/8EAAF5FejM49kmyW5Jv1VrfmmRpXrRltHm7WHtxDa1z1FrPq7WOqbWO2WabbXpzGUC6Qt+ECRMyevTonHfeeUmSs88+O5/73OcyaNCgfPazn83pp5/+kn7nn39+9t577+7Pzz//fDo7O9O/f/+MHz8+e+yxR5LkG9/4Rvbbb78MGDBgpf5z587N3Llz8453vCNjx47Ntdde24tPCQDw6tNrW1XT9QZwYa31tubz5ekKjg+VUgbUWv/QbEV9Yc/YoiSDVujf0dQW5S/bTl+oz2jqHT20T8scwDp0yy23ZODAgXn44Yczfvz4DBs2LJdffnm++tWv5qCDDsqll16ao48+Oj/96U+7+9x44405//zzc8stt3TXNt5448yZMydPPPFEJk+enF//+tfZaqutctlll2XGjBkvmXfZsmWZN29eZsyYkYULF2bcuHG5++67s+WWW66NxwYA2OD12hvHWusfkywopbylKb0nyT1JrkrywsmoRySZ1lxfleTw5nTVsUn+1Gw3vS7JhFJKv+ZQnAlJrmvuPVlKGducpnr4i8bqaQ5gHRo4sGs3ef/+/TN58uTMnDkzF154YQ488MAkyfvf//7uw3GS5K677soxxxyTadOmZeutt37JeFtuuWX22muvXHvttbnjjjsyf/787LTTThk8eHCefvrp7LTTTkmSjo6O7Lfffnnd616X7bffPkOHDs28efPWwhMDALw69Papqv8jydRSyl1JOpP8v0nOSDK+lDIvyT80n5Pk6iT3JZmf5DtJPpYkzaE4/5Tk9ubv1BcOymnafLfp83/SdTBOWuYA1pGlS5fmqaee6r6ePn16Ro4cme222y433XRTkuSGG27IkCFDkiQPPvhgDjzwwFx00UUZOnRo9ziLFy/OE088kST5v//3/+b666/PsGHD8t73vjd//OMf88ADD+SBBx7I3/3d32X+/PlJkgMOOKD7TeQjjzySuXPnZocddlhbjw4AsMHrza2qqbXOSTKmh1vv6aFtTfLxVYxzQZILeqjPSjKyh/qjPc0BrDsPPfRQJk+enKRr6+hhhx2WSZMmpW/fvvnEJz6RZcuWZbPNNuv+7uOpp56aRx99NB/72MeS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nnzyyZX6Pfjgg+nbt2/OOuus7trgwYOzyy67pLOzM2PGjOmuf/GLX8yoUaPS2dmZCRMm5Pe//32S5Mwzz0xnZ2c6OzszcuTIbLzxxnnsscfWwlMDABsawRFgHerTp0/+5V/+Jffcc09uvfXWnHPOObnnnntyzDHH5Iwzzsjdd9+dyZMn58wzz1yp36c//ensvffeLxnvxhtvzJw5czJr1qzu2uc+97ncddddmTNnTt73vvfl1FNP7a7PmTMnc+bMyemnn553vetd2WqrrXr3gQGADZLgCLAODRgwILvttluSZPPNN8/OO++cRYsWZe7cuRk3blySZPz48fnhD3/Y3edHP/pRtt9++4wYMWK15thiiy26r5cuXZpSykvaXHzxxTn00EP/lkcBAF7FBEeA9cQDDzyQO+64I3vssUdGjBiRadOmJUkuu+yyLFiwIEmyZMmSfOUrX8lJJ530kv6llEyYMCGjR4/Oeeedt9K9E088MYMGDcrUqVO73zi+4Omnn861116bgw46qJeeDADY0AmOAOuBJUuW5KCDDsrZZ5+dLbbYIhdccEG++c1vZvTo0XnqqaeyySabJElOPvnkfOpTn0rfvn1fMsYtt9ySX/3qV7nmmmtyzjnn5Oc//3n3vdNOOy0LFizIlClT8o1vfGOlfv/xH/+Rd7zjHbapAgCr1GddLwDgte65557LQQcdlClTpuTAAw9MkgwbNizTp09PksydOzc/+clPkiS33XZbLr/88hx//PF54oknstFGG2WzzTbLcccdl4EDByZJ+vfvn8mTJ2fmzJnd211fMGXKlOyzzz455ZRTumuXXHKJbaoAQCvBEWAdqrXm6KOPzs4775xPf/rT3fWHH344/fv3z/Lly/PlL385xx57bJLk5ptv7m5z8sknp2/fvjnuuOOydOnSLF++PJtvvnmWLl2a6dOn50tf+lKSZN68eRkyZEiSZNq0aRk2bFj3GH/6059y00035Qc/+MHaeFwAYAPVa1tVSymblVJmllLuLKX8ppRySlPfvpRyWyllfinl30spmzT1TZvP85v7g1cY6wtN/d5SysQV6pOa2vxSygkr1HucA2B984tf/CIXXXRRbrjhhu6fxrj66qtz8cUXZ+jQoRk2bFi22267HHnkka3jPPTQQ3nnO9+ZXXfdNbvvvnve+973ZtKkSUmSE044ISNHjsyoUaMyffr07p/8SJIrr7wyEyZMyBve8IZefU4AYMNWaq29M3DXsX1vqLUuKaW8LsktST6R5NNJrqi1XlJKOTfJnbXWb5VSPpZkVK312FLKIUkm11o/WEoZnuTiJLsn2S7JT5MMbaaZm2R8koVJbk9yaK31nlLKpT3N0bbeMWPG1BWPrwdeOd++aOLLN9qAffRD163rJfAq977Lp67rJfSqHx88ZV0vAYAkpZTZtdYxPd3rtTeOtcuS5uPrmr+a5N1JLm/qFyY5oLnev/mc5v57mvC5f5JLaq3P1FrvTzI/XSFy9yTza6331VqfTXJJkpQMHU8AACAASURBVP2bPquaAwAAgDXUq6eqllI2LqXMSfJwkuuT/J8kT9RalzVNFiYZ2FwPTLIgSZr7f0qy9Yr1F/VZVX3rljkAAABYQ70aHGutz9daO5N0pOsN4bCX6bJWlVI+UkqZVUqZtXjx4nW9HAAAgPXSWvkdx1rrE0luTPL2JFuWUl44zbUjyaLmelGSQUnS3H9jkkdXrL+oz6rqj7bM8eJ1nVdrHVNrHbPNNtv8Tc8IAADwatWbp6puU0rZsrl+fboOsfltugLkwU2zI5JMa66vaj6nuX9D7Tq556okhzSnrm6fZEiSmek6DGdIc4LqJkkOSXJV02dVcwAAALCGevN3HAckubCUsnG6AuqltdYfl1LuSXJJKeXLSe5Icn7T/vwkF5VS5id5LF1BMLXW3zSnpN6TZFmSj9dan0+SUspxSa5LsnGSC2qtv2nG+vwq5gBYbxx55aR1vYRe9W+Tr13XSwAAXiG9FhxrrXcleWsP9fvS9X3HF9f/nOT9qxjrtCSn9VC/OsnVqzsHAAAAa26tfMcRAACADZfgCAAAQCvBEQAAgFaCIwAAAK0ERwAAAFoJjgAAALQSHAEAAGglOAIAANBKcAQAAKCV4AgAAEArwREAAIBWgiMAAACtBEcAAABaCY4AAAC0EhwBAABoJTgCAADQSnAEAACgleAIAABAK8ERAACAVoIjAAAArQRHAAAAWgmOAAAAtBIcAQAAaCU4AgAA0EpwBAAAoJXgCAAAQCvBEQAAgFaCIwAAAK0ERwAAAFoJjgAAALQSHAEAAGglOAIAANBKcAQAAKCV4AgAAEArwREAAIBWgiMAAACtBEcAAABaCY4AwAZrwYIF2WuvvTJ8+PCMGDEiX/va15Ikl112WUaMGJGNNtoos2bN6m7/wAMP5PWvf306OzvT2dmZY489tvveiSeemEGDBqVv374vmefSSy/tnuOwww5b6d6TTz6Zjo6OHHfccb30lADrXp91vQAAgL9Wnz598i//8i/Zbbfd8tRTT2X06NEZP358Ro4cmSuuuCIf/ehHX9Jnxx13zJw5c15S33fffXPcccdlyJAhK9XnzZuX008/Pb/4xS/Sr1+/PPzwwyvd/+IXv5hx48a9sg8GsJ4RHAGADdaAAQMyYMCAJMnmm2+enXfeOYsWLcr48ePXeKyxY8f2WP/Od76Tj3/84+nXr1+SpH///t33Zs+enYceeiiTJk1a6c0mwKuNraoAwKvCAw88kDvuuCN77LFHa7v7778/b33rW/Oud70rN99888uOO3fu3MydOzfveMc7Mnbs2Fx77bVJkuXLl+czn/lMzjrrrFdk/QDrM28cAYAN3pIlS3LQQQfl7LPPzhZbbLHKdgMGDMiDDz6YrbfeOrNnz84BBxyQ3/zmN619li1blnnz5mXGjBlZuHBhxo0bl7vvvjs/+MEPss8++6Sjo6M3HglgvSI4AgAbtOeeey4HHXRQpkyZkgMPPLC17aabbppNN900STJ69OjsuOOOmTt3bsaMGbPKPh0dHdljjz3yute9Lttvv32GDh2aefPm5Ze//GVuvvnmfPOb38ySJUvy7LPPpm/fvjnjjDNe0ecDWB/YqgoAbLBqrTn66KOz884759Of/vTLtl+8eHGef/75JMl9992XefPmZYcddmjtc8ABB2TGjBlJkkceeSRz587NDjvskKlTp+bBBx/MAw88kLPOOiuHH3640Ai8agmOAMAG6xe/+EUuuuii3HDDDd0/sXH11VfnyiuvTEdHR375y1/mve99byZOnJgk+fnPf55Ro0als7MzBx98cM4999xstdVWSZLjjz8+HR0defrpp9PR0ZGTTz45STJx4sRsvfXWGT58ePbaa6+ceeaZ2XrrrdfVIwOsE6XWuq7XsF4YM2ZMdRoa9I5vXzRxXS+hV330Q9f9Vf2OvHLSK7yS9cu/Tb52XS/hVeN9l09d10voVT8+eMq6XgIASUops2utPe7d98YRAACAVoIjAAAArQRHAAAAWgmOAAAAtBIcAQAAaNVnXS9gQ3HUUUflxz/+cfr3759f//rXSZI777wzxx57bJYsWZLBgwdn6tSp2WKLLfLAAw9k5513zlve8pYkydixY3PuuecmSU488cR8//vfz+OPP54lS5Z0j/+73/0uRx11VBYvXpytttoqP/jBD9LR0ZEkufDCC/PlL385SfI//+f/zBFHHLE2Hx0A1ksHXP6zdb2EXvWjg9+zrpcA0M0bx9X04Q9/ONdeu/LR8sccc0zOOOOM3H333Zk8eXLOPPPM7ns77rhj5syZkzlz5nSHxiTZd999M3PmzJeM/9nPfjaHH3547rrrrnzpS1/KF77whSTJY489llNOOSW33XZbZs6cmVNOOSWPP/54Lz0lAADASwmOq2ncuHHdPxD8grlz52bcuHFJkvHjx+eHP/zhy44zduzYDBgw4CX1e+65J+9+97uTJHvttVemTZuWJLnuuusyfvz4bLXVVunXr1/Gjx//kgALAADQmwTHv8GIESO6A95ll12WBQsWdN+7//7789a3vjXvete7cvPNN7/sWLvuumuuuOKKJMmVV16Zp556Ko8++mgWLVqUQYMGdbfr6OjIokWLXuEnAQAAWDXB8W9wwQUX5Jvf/GZGjx6dp556KptsskmSZMCAAXnwwQdzxx135F//9V9z2GGH5cknn2wd66yzzspNN92Ut771rbnpppsycODAbLzxxmvjMQAAAFo5HOdvMGzYsEyfPj1J17bVn/zkJ0mSTTfdNJtuummSZPTo0dlxxx0zd+7cjBkzZpVjbbfddt1vHJcsWZIf/vCH2XLLLTNw4MDMmDGju93ChQvz93//973zQAAAAD3wxvFv8PDDDydJli9fni9/+cs59thjkySLFy/O888/nyS57777Mm/evOywww6tYz3yyCNZvnx5kuT000/PUUcdlSSZOHFipk+fnscffzyPP/54pk+fnokTJ/bWIwEAALxErwXHUsqgUsqNpZR7Sim/KaV8oqlvVUq5vpQyr/m3X1MvpZSvl1Lml1LuKqXstsJYRzTt55VSjlihPrqUcnfT5+ullNI2x9/i0EMPzdvf/vbce++96ejoyPnnn5+LL744Q4cOzbBhw7LddtvlyCOPTJL8/Oc/z6hRo9LZ2ZmDDz445557bvfBOscff3w6Ojry9NNPp6OjIyeffHKSZMaMGXnLW96SoUOH5qGHHsqJJ56YJNlqq63yxS9+MW9729vytre9LV/60pdeckgPAABAbyq11t4ZuJQBSQbUWn9VStk8yewkByT5cJLHaq1nlFJOSNKv1vr5Uso+Sf5Hkn2S7JHka7XWPUopWyWZlWRMktqMM7rW+ngpZWaSf0xyW5Krk3y91npNKeWfe5qjbb1jxoyps2bNeuX/QwD59kWv7rfkH/3QdX9VvyOvnPQKr2T98m+TnQD9Snnf5VPX9RJ61Y8PnvJX9fM7jgCvrFLK7Fprj9+v67U3jrXWP9Raf9VcP5Xkt0kGJtk/yYVNswvTFSbT1L9fu9yaZMsmfE5Mcn2t9bFa6+NJrk8yqbm3Ra311tqVfr//orF6mgMAAIA1tFa+41hKGZzkrel6M7htrfUPza0/Jtm2uR6YZMEK3RY2tbb6wh7qaZnjxev6SCllVill1uLFi9f8wQAAYAN21FFHpX///hk5cmR37YMf/GA6OzvT2dmZwYMHp7OzM0ny7LPP5sgjj8wuu+ySXXfddaUDHCdNmpRdd901I0aMyLHHHtt93keS/K//9b8ybNiwjBgxIscff3x3/fTTT89OO+2Ut7zlLbnuur9u9w5rT6+fqlpK6Zvkh0k+WWt9svkaYpKk1lpLKb2zV3Y15qi1npfkvKRrq2pvrgMAANY3H/7wh3Pcccfl8MMP7679+7//e/f1Zz7zmbzxjW9MknznO99Jktx99915+OGHs/fee+f222/PRhttlEsvvTRbbLFFaq05+OCDc9lll+WQQw7JjTfemGnTpuXOO+/Mpptu2n245D333JNLLrkkv/nNb/L73/8+//AP/5C5c+f6Obr1WK++cSylvC5doXFqrfWKpvxQs830he9BPtzUFyUZtEL3jqbWVu/ood42BwAA0Bg3btwqD16stebSSy/NoYcemqQr7L373e9OkvTv3z9bbrllXjgjZIsttkiSLFu2LM8++2xeeFn0rW99KyeccEL3T9X1798/STJt2rQccsgh2XTTTbP99ttnp512ysyZM3vvQfmb9eapqiXJ+Ul+W2v91xVuXZXkhZNRj0gybYX64c3pqmOT/KnZbnpdkgmllH7N6agTklzX3HuylDK2mevwF43V0xwAAMBquPnmm7PttttmyJAhSZJdd901V111VZYtW5b7778/s2fPzoIFf/lG2cSJE9O/f/9svvnmOfjgg5N0/db5zTffnD322CPvete7cvvttydJFi1alEGD/vJuqKOjI4sWLQrrr97cqvqOJB9KcncpZU5T+3+SnJHk0lLK0Ul+l+QDzb2r03Wi6vwkTyc5MklqrY+VUv4pye1Nu1NrrY811x9L8r0kr09yTfOXljn+Kou/9YO/pft6b5v//l/X9RIAAFjPXHzxxd1vG5Ou70P+9re/zZgxY/LmN785e+6550pbS6+77rr8+c9/zpQpU3LDDTdk/PjxWbZsWR577LHceuutuf322/OBD3wg991337p4HP5GvRYca623JCmruP2S86Wbk1E/voqxLkhyQQ/1WUlG9lB/tKc5AACAl7ds2bJcccUVmT17dnetT58++epXv9r9ec8998zQoUNX6rfZZptl//33z7Rp0zJ+/Ph0dHTkwAMPTCklu+++ezbaaKM88sgjGThw4EpvKxcuXJiBAweG9ddaOVUVAADYcPz0pz/NsGHD0tHxlyNFnn766SxdujRJcv3116dPnz4ZPnx4lixZkj/8oesHDZYtW5af/OQnGTZsWJLkgAMOyI033pika9vqs88+mze96U3Zb7/9cskll+SZZ57J/fffn3nz5mX33Xdfy0/Jmuj1U1UBAID106GHHpoZM2bkkUceSUdHR0455ZQcffTRueSSS1bappokDz/8cCZOnJiNNtooAwcOzEUXXZQkWbp0afbbb78888wzWb58efbaa68ce+yxSbq2tx511FEZOXJkNtlkk1x44YUppWTEiBH5wAc+kOHDh6dPnz4555xznKi6nhMcAQDgNeriiy/usf69733vJbXBgwfn3nvvfUl922237T705sU22WST/OAHPZ8XcuKJJ+bEE09c/cWyTtmqCgAAQCvBEQAAgFaCIwAAAK0ERwAAAFoJjgAAALRyqioAALwGPXD2H9f1EnrV4E/+l3W9hFcVbxwBAABoJTgCAADQSnAEAACgleAIAABAK8ERAACAVoIjAAAArQRHAAAAWgmOAAAAtBIcAQAAaCU4AgAA0EpwBAAAoJXgCAAAQCvBEQAAgFaCIwAAAK0ERwAAAFoJjgAAALQSHAEAAGglOAIAANBKcAQAAKCV4AgA8Cpz1FFHpX///hk5cmR37XOf+1yGDRuWUaNGZfLkyXniiSeSJM8++2yOPPLI7LLLLtl1110zY8aM7j4nnnhiBg0alL59+640/ve+971ss8026ezsTGdnZ7773e8mSX73u99lt912S2dnZ0aMGJFzzz239x8WWCsERwCAV5kPf/jDufbaa1eqjR8/Pr/+9a9z1113ZejQoTn99NOTJN/5zneSJHfffXeuv/76fOYzn8ny5cuTJPvuu29mzpzZ4xwf/OAHM2fOnMyZMyfHHHNMkmTAgAH55S9/mTlz5uS2227LGWeckd///ve99ZjAWiQ4AgC8yowbNy5bbbXVSrUJEyakT58+SZKxY8dm4cKFSZJ77rkn7373u5Mk/fv3z5ZbbplZs2Z1txswYMBqz7vJJptk0003TZI888wz3QEU2PAJjgAArzEXXHBB9t577yTJrrvumquuuirLli3L/fffn9mzZ2fBggUvO8YPf/jDjBo1KgcffPBK7RcsWJBRo0Zl0KBB+fznP5/tttuu154DWHsERwCA15DTTjstffr0yZQpU5J0fR+yo6MjY8aMySc/+cnsueee2XjjjVvH2HffffPAAw/krrvuyvjx43PEEUd03xs0aFDuuuuuzJ8/PxdeeGEeeuihXn0eYO0QHAEAXiO+973v5cc//nGmTp2aUkqSpE+fPvnqV7+aOXPmZNq0aXniiScydOjQ1nG23nrr7i2pxxxzTGbPnv2SNtttt11GjhyZm2+++ZV/EOD/b+++o6wq7zWOfx/Eq7FgR0WiWFGQYhejxhJib9gu0cRY4jUmUWOJ3CTWeGOLMWg0xoaKijUqMTbEXgiCUqyxJqLYURCxgL/7x95nODBnzqDIvPuwn89as5jz7jMzz9mL2Wd++21tzoWjmZmZWQncddddnHXWWQwdOpRFFlmkqf2TTz5h6tSpAAwbNoz27dvTrVu3ut9r4sSJTZ8PHTqUddZZB4AJEyYwbdo0ACZNmsQjjzxC165dv+mXYmYJtE8dwMzMzMy+Wf379+eBBx7gvffeo3PnzpxyyimcfvrpfPbZZ/Tt2xfIFr656KKLeOedd9huu+1o164dK620EoMHD276Pr/61a+49tpr+eSTT+jcuTOHHHIIJ598Mueddx5Dhw6lffv2LL300lxxxRUAPPfccxxzzDFIIiI49thj6dGjR4pTYGbfMBeOZmZmZvOZIUOGNGs7+OCDaz63S5cuvPDCCzWPnXXWWZx11lnN2k8//fSm7Tyq9e3bl3Hjxn3FtGbWCDxU1czMzMzMzOpy4WhmZmZmZmZ1uXA0MzMzMzOzulw4mpmZmZmZWV0uHM3MzMzMzKwur6pqZmZmNh854pbXU0eYp87b49upI5iVknsczczMzMzMrC4XjmZmZmZmZlaXC0czMzMzMzOry4WjmZmZmZmZ1eXC0czMzMzMzOpy4WhmZmZmZmZ1uXA0MzMzMzOzulw4mpmZmZmZWV0uHM3MzMzMzKwuF45mZmZmZmZWlwtHMzMzMzMzq8uFo5mZmZmZmdXlwtHMzMzMzMzqcuFoZmZmZqVw7rnn0r17d9Zdd1369+/Pp59+yhZbbEHv3r3p3bs3nTp1Yvfddwfg+eefp0+fPiy00EL84Q9/aPoeL7zwQtPze/fuTYcOHfjTn/4EwNixY+nTpw89evRgl112YfLkyUlep9m84MLRzMzMzOZ7b7zxBueddx6jRo3i6aefZsaMGVx33XU8/PDDjBkzhjFjxtCnTx/69esHwNJLL815553HscceO8v36dq1a9PzR48ezSKLLMIee+wBwCGHHMIZZ5zB+PHj2WOPPTj77LPb/HWazSvzrHCUdLmkdyQ9XdW2tKRhkl7M/10qb5ek8yS9JGmcpPWrvuaA/PkvSjqgqn0DSePzrzlPkur9DLO2VOuOZsURRxzBYost1uxrbr75ZiQxatQoAD7//HMOPPBAevToQa9evXjggQeannv99dfTs2dPunfvzvHHHz/PX4+Zmdn8YPr06UybNo3p06fzySef0KlTp6ZjkydP5r777mvqcezYsSMbbbQRCy64YIvfb/jw4ay++uqsssoqAPzrX/9iyy23BKBv377cfPPN8/DVmLWtednjeAWw/WxtA4DhEbEmMDx/DLADsGb+cSjwF8iKQOAkYBNgY+CkqkLwL8BPqr5u+1Z+hlmbaOmOJsCoUaOYNGlSs6+ZMmUKAwcOZJNNNmlqu+SSSwAYP348w4YN45hjjuHLL7/k/fff57jjjmP48OE888wzvPXWWwwfPrxtXpyZmVmDWmmllTj22GNZeeWVWXHFFVliiSX4/ve/33T81ltvZdttt6VDhw5z/D2vu+46+vfv3/S4e/fu3HbbbQDceOONvP7669/cCzBLbJ4VjhHxEPDBbM27AVfmn18J7F7VflVkRgBLSloR2A4YFhEfRMQkYBiwfX6sQ0SMiIgArprte9X6GWZtptYdzRkzZnDcccdx1llnNXv+CSecwPHHH8/CCy/c1Pbss8+yzTbbANldzyWXXJJRo0bxyiuvsOaaa7LccssB8L3vfc93NM3MzFoxadIkbrvtNl599VXefPNNpk6dytVXX910fMiQIbMUga35/PPPGTp0KHvvvXdT2+WXX86FF17IBhtswJQpU/iv//qvb/Q1mKXU1nMcl4+IifnnbwHL55+vBFTfkpmQt9Vrn1Cjvd7PaEbSoZJGSRr17rvvfo2XY9ZcS3c0//znP7Prrruy4oorzvL8J598ktdff52ddtpplvZevXoxdOhQpk+fzquvvsro0aN5/fXXWWONNXjhhRd47bXXmD59OrfeeqvvaJqZmbXi3nvvZdVVV2W55ZZjwQUXpF+/fjz22GMAvPfee4wcObLZe3E9d955J+uvvz7LLz/zT821116be+65h9GjR9O/f39WX331b/x1mKWSbHGcvKcwUv6MiLg4IjaMiA0rvTdmc6vWHc2rrrqKG2+8kV/84hezPPfLL7/k6KOP5pxzzmn2fQ466CA6d+7MhhtuyFFHHcVmm23GAgsswFJLLcVf/vIX9t13X7bYYgu6dOnCAgss0FYvz8zMrCGtvPLKjBgxgk8++YSIYPjw4ayzzjoA3HTTTey8886zjPxpTa0eynfeeQfI3t9PO+00DjvssG/uBZgl1taF49v5MFPyf9/J298Avl31vM55W732zjXa6/0MszZR647mSSedxEsvvcQaa6xBly5d+OSTT1hjjTWYMmUKTz/9NFtttRVdunRhxIgR7LrrrowaNYr27dtz7rnnMmbMGG677TY+/PBD1lprLQB22WUX/vnPf/L444/TtWvXpnYzMzOrbZNNNmGvvfZi/fXXp0ePHnz55ZcceuihQPO5igBvvfUWnTt35o9//COnnXYanTt3btpeY+rUqQwbNqxpBdaKIUOGsNZaa7H22mvTqVMnDjzwwLZ5cWZtoH0b/7yhwAHAGfm/t1W1/1zSdWQL4XwUERMl3Q38vmpBnO8D/xsRH0iaLGlT4J/Aj4DzW/kZZm2i+o7mt771LYYPH87RRx89S2/jYostxksvvQRkw2MqttpqK/7whz+w4YYbNt0RXXTRRRk2bBjt27enW7duQHZHs2PHjkyaNIkLL7yQG264oW1fpJmZWQM65ZRTOOWUU5q1V69cXrHCCiswYcKEZu0Aiy66KO+//36z9iOPPJIjjzxyrnOaFdE8KxwlDQG2ApaVNIFsddQzgBskHQz8G9gnf/odwI7AS8AnwIEAeYH4O+CJ/HmnRkRlwZ3DyVZu/RZwZ/5BnZ9h1iaq72i2b9+e9dZbr+mO5lfxzjvvsN1229GuXTtWWmklBg8e3HTsyCOPZOzYsQCceOKJ7nE0MzMzs3lqnhWOEdHSslTb1nhuAD9r4ftcDlxeo30UsG6N9vdr/QyzttTSHc2Kjz/+uGZ79R3PLl268MILL9R83pAhQ+Yqn5mZmZnZV5FscRwzMzMzMzNrDC4czczMzMzMrC4XjmZmZmZmZlZXW6+qamZmZmbW5u68/r3Wn9Sgdth32dQRrATc42hmZmZmZmZ1ucfR7Bt092U7po4wT2138B2pI5iZmZlZAu5xNDMzMzMzs7pcOJqZmZmZmVldLhzNzMzMzMysLheOZmZmZmZmVpcLRzMzMzMzM6vLhaOZmZmZmZnV5cLRzMzMzMzM6nLhaGZmZmZmZnW5cDQzMzMzM7O6XDiamZmZmZlZXS4czczMzMzMrC4XjmZmZmZmZlaXC0czMzMzMzOry4WjmZmZmZmZ1eXC0czMzMzMzOpy4WhmZmZmZmZ1uXA0MzMzMzOzulw4mpmZmZmZWV0uHM3MzMzMzKwuF45mZmZmZmZWlwtHMzMzMzMzq8uFo5mZmZmZmdXlwtHMzMzMzMzqcuFoZmZmZmZmdblwNDMzMzMzs7pcOJqZmZmZmVldLhzNzMzMzMysLheOZmZmZmZmVpcLRzMzMzMzM6vLhaOZmZmZmZnV5cLRzMzMzMzM6nLhaGZmZmZmZnW5cDQzMzMzM7O6XDiamZmZmZlZXS4czczMzMzMrC4XjmZmZmZmZlaXC0czMzMzMzOry4WjmZmZmZmZ1eXC0czMzMzMbDZdunShR48e9O7dmw033BCADz74gL59+7LmmmvSt29fJk2aBMBHH33ELrvsQq9evejevTuDBg0CYMyYMfTp04fu3bvTs2dPrr/++mSvZ265cDQzMzMzM6vh/vvvZ8yYMYwaNQqAM844g2233ZYXX3yRbbfdljPOOAOACy64gG7dujF27FgeeOABjjnmGD7//HMWWWQRrrrqKp555hnuuusujjrqKD788MOUL+lrc+FoZmaF8vrrr7P11lvTrVs3unfvzsCBA4GW7/Jec8019OzZkx49erDZZpsxduxYAD799FM23njjpru/J510UrLXZGZm84fbbruNAw44AIADDjiAW2+9FQBJTJkyhYjg448/Zumll6Z9+/astdZarLnmmgB06tSJjh078u677ybLPzdcONpcmzFjBuuttx4777wzAPvttx9du3Zl3XXX5aCDDuKLL74AWu7CNzOr1r59e8455xyeffZZRowYwQUXXMCzzz7b4l3eVVddlQcffJDx48dzwgkncOihhwKw0EILcd999zF27FjGjBnDXXfdxYgRI1K+NDMzayCS+P73v88GG2zAxRdfDMDbb7/NiiuuCMAKK6zA22+/DcDPf/5znnvuOTp16kSPHj0YOHAg7drNWmqNHDmSzz//nNVXX71tX8g3xIWjzbWBAweyzjrrND3eb7/9eP755xk/fjzTpk3j0ksvBVruwjczq7biiiuy/vrrA7D44ouzzjrr8MYbb7R4l3ezzTZjqaWWAmDTTTdlwoQJQPaGv9hiiwHwxRdf8MUXXyCprV+OmZk1qEcevvsjuAAAIABJREFUeYQnn3ySO++8kwsuuICHHnpoluOSmt5X7r77bnr37s2bb77JmDFj+PnPf87kyZObnjtx4kR++MMfMmjQoGYFZaNozNRWGBMmTOAf//gHhxxySFPbjjvu2PSLtPHGG8/yR1ytLnwzs5a89tprPPXUU2yyySYt3uWtdtlll7HDDjs0PZ4xYwa9e/emY8eO9O3bl0022aTNspuZWWNbaaWVAOjYsSN77LEHI0eOZPnll2fixIlAVgx27NgRgEGDBtGvXz8kscYaa7Dqqqvy/PPPAzB58mR22mkn/u///o9NN900zYv5BrhwtLly1FFHcdZZZ9W8c/LFF18wePBgtt9+e2DOuvDNzCo+/vhj9txzT/70pz/RoUOHWY5V3+WtuP/++7nssss488wzm9oWWGABxowZw4QJExg5ciRPP/10m2Q3M7PGNnXqVKZMmdL0+T333MO6667LrrvuypVXXgnAlVdeyW677QbAyiuvzPDhw4FsOOsLL7zAaqutxueff84ee+zBj370I/baa680L+Yb4r/a7Wu7/fbb6dixIxtssEHN44cffjhbbrklW2yxBdB6F76ZWcUXX3zBnnvuyX777Ue/fv0AWrzLCzBu3DgOOeQQbrvtNpZZZplm32/JJZdk66235q677mqbF2BmZg3t7bffZvPNN6dXr15svPHG7LTTTmy//fYMGDCAYcOGseaaa3LvvfcyYMAAAE444QQee+wx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\n",
      "text/plain": [
       "<Figure size 1080x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "f,axarray = plt.subplots(1,1,figsize=(15,10))\n",
    "test_source_type_hist = test.groupby(['source_type'],as_index=False).count()\n",
    "splot = sns.barplot(x=test_source_type_hist['source_type'], y=test_source_type_hist['msno'])\n",
    "plt.xticks(rotation=90)\n",
    "for i in splot.patches:\n",
    "    # get_x pulls left or right; get_height pushes up or down\n",
    "    splot.text(i.get_x(), i.get_height()+10010, i.get_height().astype(int), fontsize=10,color='black')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 5、Song Extra Infos"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>song_id</th>\n",
       "      <th>name</th>\n",
       "      <th>isrc</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>LP7pLJoJFBvyuUwvu+oLzjT+bI+UeBPURCecJsX1jjs=</td>\n",
       "      <td>我們</td>\n",
       "      <td>TWUM71200043</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>ClazTFnk6r0Bnuie44bocdNMM3rdlrq0bCGAsGUWcHE=</td>\n",
       "      <td>Let Me Love You</td>\n",
       "      <td>QMZSY1600015</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>u2ja/bZE3zhCGxvbbOB3zOoUjx27u40cf5g09UXMoKQ=</td>\n",
       "      <td>原諒我</td>\n",
       "      <td>TWA530887303</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>92Fqsy0+p6+RHe2EoLKjHahORHR1Kq1TBJoClW9v+Ts=</td>\n",
       "      <td>Classic</td>\n",
       "      <td>USSM11301446</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0QFmz/+rJy1Q56C1DuYqT9hKKqi5TUqx0sN0IwvoHrw=</td>\n",
       "      <td>愛投羅網</td>\n",
       "      <td>TWA471306001</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                        song_id             name          isrc\n",
       "0  LP7pLJoJFBvyuUwvu+oLzjT+bI+UeBPURCecJsX1jjs=               我們  TWUM71200043\n",
       "1  ClazTFnk6r0Bnuie44bocdNMM3rdlrq0bCGAsGUWcHE=  Let Me Love You  QMZSY1600015\n",
       "2  u2ja/bZE3zhCGxvbbOB3zOoUjx27u40cf5g09UXMoKQ=              原諒我  TWA530887303\n",
       "3  92Fqsy0+p6+RHe2EoLKjHahORHR1Kq1TBJoClW9v+Ts=          Classic  USSM11301446\n",
       "4  0QFmz/+rJy1Q56C1DuYqT9hKKqi5TUqx0sN0IwvoHrw=             愛投羅網  TWA471306001"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "(2296076, 3)"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "songs_extra = pd.read_csv(dpath + 'song_extra_info.csv')\n",
    "songs_extra.head()\n",
    "songs_extra.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 查看song_extra_info数据缺失情况"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "song_id         0\n",
       "name            2\n",
       "isrc       136552\n",
       "dtype: int64"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "songs_extra.isnull().sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### isrc\n",
    "\n",
    "**由于isrc可以表示国家代码和参考年份，所以把其转换成年份**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 将isrc转换成年份\n",
    "def isrc_to_year(isrc):\n",
    "    if type(isrc) == str:\n",
    "        if int(isrc[5:7]) > 17:\n",
    "            return 1900 + int(isrc[5:7])\n",
    "        else:\n",
    "            return 2000 + int(isrc[5:7])\n",
    "    else:\n",
    "        return np.nan\n",
    "        \n",
    "songs_extra['song_year'] = songs_extra['isrc'].apply(isrc_to_year)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>song_id</th>\n",
       "      <th>name</th>\n",
       "      <th>isrc</th>\n",
       "      <th>song_year</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>LP7pLJoJFBvyuUwvu+oLzjT+bI+UeBPURCecJsX1jjs=</td>\n",
       "      <td>我們</td>\n",
       "      <td>TWUM71200043</td>\n",
       "      <td>2012.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>ClazTFnk6r0Bnuie44bocdNMM3rdlrq0bCGAsGUWcHE=</td>\n",
       "      <td>Let Me Love You</td>\n",
       "      <td>QMZSY1600015</td>\n",
       "      <td>2016.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>u2ja/bZE3zhCGxvbbOB3zOoUjx27u40cf5g09UXMoKQ=</td>\n",
       "      <td>原諒我</td>\n",
       "      <td>TWA530887303</td>\n",
       "      <td>2008.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>92Fqsy0+p6+RHe2EoLKjHahORHR1Kq1TBJoClW9v+Ts=</td>\n",
       "      <td>Classic</td>\n",
       "      <td>USSM11301446</td>\n",
       "      <td>2013.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0QFmz/+rJy1Q56C1DuYqT9hKKqi5TUqx0sN0IwvoHrw=</td>\n",
       "      <td>愛投羅網</td>\n",
       "      <td>TWA471306001</td>\n",
       "      <td>2013.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                        song_id             name  \\\n",
       "0  LP7pLJoJFBvyuUwvu+oLzjT+bI+UeBPURCecJsX1jjs=               我們   \n",
       "1  ClazTFnk6r0Bnuie44bocdNMM3rdlrq0bCGAsGUWcHE=  Let Me Love You   \n",
       "2  u2ja/bZE3zhCGxvbbOB3zOoUjx27u40cf5g09UXMoKQ=              原諒我   \n",
       "3  92Fqsy0+p6+RHe2EoLKjHahORHR1Kq1TBJoClW9v+Ts=          Classic   \n",
       "4  0QFmz/+rJy1Q56C1DuYqT9hKKqi5TUqx0sN0IwvoHrw=             愛投羅網   \n",
       "\n",
       "           isrc  song_year  \n",
       "0  TWUM71200043     2012.0  \n",
       "1  QMZSY1600015     2016.0  \n",
       "2  TWA530887303     2008.0  \n",
       "3  USSM11301446     2013.0  \n",
       "4  TWA471306001     2013.0  "
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "2296076"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "songs_extra.head()\n",
    "len(songs_extra['song_id'].unique().tolist())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,\n",
       "        17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,\n",
       "        34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,\n",
       "        51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,\n",
       "        68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,\n",
       "        85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]),\n",
       " <a list of 100 Text xticklabel objects>)"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA48AAAJmCAYAAAD8VbXxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzde7h9VV0v/vdHvmqaqSDXAEOLOpEnSQkxPcdbIaAJCKndJA5KKaSWlto5HTxd9ZyTmqkUJollonJRNBTxVr8uGnjFa3wjTYhbYmrHLqLj98ecW5a7vfZYm7X25bt5vZ5nPXutMeYaY8yx15x7v9eca65qrQUAAABWc7vNHgAAAABbn/AIAABAl/AIAABAl/AIAABAl/AIAABAl/AIAABA147NHsBWsueee7aDDjpos4cBAACwKd7//vf/Y2ttr5XqhMcJBx10UC6//PLNHgYAAMCmqKrPTKtz2ioAAABdwiMAAABdwiMAAABdwiMAAABdwiMAAABdwiMAAABdwiMAAABdwiMAAABdwiMAAABdwiMAAABdwiMAAABdwiMAAABdwiMAAABdwiMAAABdwiMAAABdwiMAAABdwiMAAABdwiMAAABdwiMAAABdwiMAAABdwiMAAABdwiMAAABdwiMAAABdwiMAAABdOzZ7AAAAAMzmhpddtGL53qc9Zt37duQRAACALuERAACALuERAACALuERAACALuERAACALuERAACALuERAACALuERAACALuERAACALuERAACALuERAACALuERAACALuERAACALuERAACALuERAACALuERAACALuERAACALuERAACALuERAACALuERAACALuERAACALuERAACALuERAACALuERAACALuERAACALuERAACArh2bPQAAAAAW44aXXTC1bu/THjtX2448AgAA0CU8AgAA0CU8AgAA0LWu4bGqDqyqd1fVx6vqY1X19LH8eVV1TVV9aLwdM/Gc51bVzqr6VFU9cqL8qLFsZ1U9Z6L8XlX1vrH8dVV1h7H8juPjnWP9Qeu5rgAAANvZeh95vDnJM1trhyQ5IslpVXXIWPei1tqh4+3iJBnrnpDke5IcleTlVbVbVe2W5GVJjk5ySJIfnWjnBWNb35Hk80lOGctPSfL5sfxF43IAAADcCusaHltr17bWPjDe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\n",
      "text/plain": [
       "<Figure size 1080x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "f,axarray = plt.subplots(1,1,figsize=(15,10))\n",
    "song_year_hist = songs_extra.groupby(['song_year'],as_index=False).count()\n",
    "splot = sns.barplot(x=song_year_hist['song_year'], y=song_year_hist['song_id'])\n",
    "plt.xticks(rotation=90)\n",
    "# for i in splot.patches:\n",
    "#     # get_x pulls left or right; get_height pushes up or down\n",
    "#     splot.text(i.get_x(), i.get_height()+10010, i.get_height().astype(int), fontsize=10,color='black')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**音乐年份大部分分布在1988~2017之间**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 特征工程（FE）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 缺失值处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "========== Songs ==========\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>song_id</th>\n",
       "      <th>song_length</th>\n",
       "      <th>genre_ids</th>\n",
       "      <th>artist_name</th>\n",
       "      <th>composer</th>\n",
       "      <th>lyricist</th>\n",
       "      <th>language</th>\n",
       "      <th>split_artist_name</th>\n",
       "      <th>number_of_artists</th>\n",
       "      <th>split_genre_ids</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>CXoTN1eb7AI+DntdU1vbcwGRV4SCIDxZu+YD8JP8r4E=</td>\n",
       "      <td>247640</td>\n",
       "      <td>465</td>\n",
       "      <td>張信哲 (Jeff Chang)</td>\n",
       "      <td>董貞</td>\n",
       "      <td>何啟弘</td>\n",
       "      <td>3.0</td>\n",
       "      <td>[張信哲 (Jeff Chang)]</td>\n",
       "      <td>1</td>\n",
       "      <td>[465]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>o0kFgae9QtnYgRkVPqLJwa05zIhRlUjfF7O1tDw0ZDU=</td>\n",
       "      <td>197328</td>\n",
       "      <td>444</td>\n",
       "      <td>BLACKPINK</td>\n",
       "      <td>TEDDY|  FUTURE BOUNCE|  Bekuh BOOM</td>\n",
       "      <td>TEDDY</td>\n",
       "      <td>31.0</td>\n",
       "      <td>[BLACKPINK]</td>\n",
       "      <td>1</td>\n",
       "      <td>[444]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>DwVvVurfpuz+XPuFvucclVQEyPqcpUkHR0ne1RQzPs0=</td>\n",
       "      <td>231781</td>\n",
       "      <td>465</td>\n",
       "      <td>SUPER JUNIOR</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>31.0</td>\n",
       "      <td>[SUPER JUNIOR]</td>\n",
       "      <td>1</td>\n",
       "      <td>[465]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>dKMBWoZyScdxSkihKG+Vf47nc18N9q4m58+b4e7dSSE=</td>\n",
       "      <td>273554</td>\n",
       "      <td>465</td>\n",
       "      <td>S.H.E</td>\n",
       "      <td>湯小康</td>\n",
       "      <td>徐世珍</td>\n",
       "      <td>3.0</td>\n",
       "      <td>[S.H.E]</td>\n",
       "      <td>1</td>\n",
       "      <td>[465]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>W3bqWd3T+VeHFzHAUfARgW9AvVRaF4N5Yzm4Mr6Eo/o=</td>\n",
       "      <td>140329</td>\n",
       "      <td>726</td>\n",
       "      <td>貴族精選</td>\n",
       "      <td>Traditional</td>\n",
       "      <td>Traditional</td>\n",
       "      <td>52.0</td>\n",
       "      <td>[貴族精選]</td>\n",
       "      <td>1</td>\n",
       "      <td>[726]</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                        song_id  song_length genre_ids  \\\n",
       "0  CXoTN1eb7AI+DntdU1vbcwGRV4SCIDxZu+YD8JP8r4E=       247640       465   \n",
       "1  o0kFgae9QtnYgRkVPqLJwa05zIhRlUjfF7O1tDw0ZDU=       197328       444   \n",
       "2  DwVvVurfpuz+XPuFvucclVQEyPqcpUkHR0ne1RQzPs0=       231781       465   \n",
       "3  dKMBWoZyScdxSkihKG+Vf47nc18N9q4m58+b4e7dSSE=       273554       465   \n",
       "4  W3bqWd3T+VeHFzHAUfARgW9AvVRaF4N5Yzm4Mr6Eo/o=       140329       726   \n",
       "\n",
       "        artist_name                            composer     lyricist language  \\\n",
       "0  張信哲 (Jeff Chang)                                  董貞          何啟弘      3.0   \n",
       "1         BLACKPINK  TEDDY|  FUTURE BOUNCE|  Bekuh BOOM        TEDDY     31.0   \n",
       "2      SUPER JUNIOR                                 NaN          NaN     31.0   \n",
       "3             S.H.E                                 湯小康          徐世珍      3.0   \n",
       "4              貴族精選                         Traditional  Traditional     52.0   \n",
       "\n",
       "    split_artist_name  number_of_artists split_genre_ids  \n",
       "0  [張信哲 (Jeff Chang)]                  1           [465]  \n",
       "1         [BLACKPINK]                  1           [444]  \n",
       "2      [SUPER JUNIOR]                  1           [465]  \n",
       "3             [S.H.E]                  1           [465]  \n",
       "4              [貴族精選]                  1           [726]  "
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "========== Members ==========\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>msno</th>\n",
       "      <th>city</th>\n",
       "      <th>bd</th>\n",
       "      <th>gender</th>\n",
       "      <th>registered_via</th>\n",
       "      <th>registration_init_time</th>\n",
       "      <th>expiration_date</th>\n",
       "      <th>membership_days</th>\n",
       "      <th>registration_year</th>\n",
       "      <th>registration_month</th>\n",
       "      <th>registration_day</th>\n",
       "      <th>expiration_year</th>\n",
       "      <th>expiration_month</th>\n",
       "      <th>expiration_day</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>XQxgAYj3klVKjR3oxPPXYYFp4soD4TuBghkhMTD4oTw=</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>7</td>\n",
       "      <td>2011-08-20</td>\n",
       "      <td>2017-09-20</td>\n",
       "      <td>2223</td>\n",
       "      <td>2011</td>\n",
       "      <td>8</td>\n",
       "      <td>20</td>\n",
       "      <td>2017</td>\n",
       "      <td>9</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>UizsfmJb9mV54qE9hCYyU07Va97c0lCRLEQX3ae+ztM=</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>7</td>\n",
       "      <td>2015-06-28</td>\n",
       "      <td>2017-06-22</td>\n",
       "      <td>725</td>\n",
       "      <td>2015</td>\n",
       "      <td>6</td>\n",
       "      <td>28</td>\n",
       "      <td>2017</td>\n",
       "      <td>6</td>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>D8nEhsIOBSoE6VthTaqDX8U6lqjJ7dLdr72mOyLya2A=</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>4</td>\n",
       "      <td>2016-04-11</td>\n",
       "      <td>2017-07-12</td>\n",
       "      <td>457</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>11</td>\n",
       "      <td>2017</td>\n",
       "      <td>7</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>mCuD+tZ1hERA/o5GPqk38e041J8ZsBaLcu7nGoIIvhI=</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>9</td>\n",
       "      <td>2015-09-06</td>\n",
       "      <td>2015-09-07</td>\n",
       "      <td>1</td>\n",
       "      <td>2015</td>\n",
       "      <td>9</td>\n",
       "      <td>6</td>\n",
       "      <td>2015</td>\n",
       "      <td>9</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>q4HRBfVSssAFS9iRfxWrohxuk9kCYMKjHOEagUMV6rQ=</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>4</td>\n",
       "      <td>2017-01-26</td>\n",
       "      <td>2017-06-13</td>\n",
       "      <td>138</td>\n",
       "      <td>2017</td>\n",
       "      <td>1</td>\n",
       "      <td>26</td>\n",
       "      <td>2017</td>\n",
       "      <td>6</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                           msno city  bd gender  \\\n",
       "0  XQxgAYj3klVKjR3oxPPXYYFp4soD4TuBghkhMTD4oTw=    1   0    NaN   \n",
       "1  UizsfmJb9mV54qE9hCYyU07Va97c0lCRLEQX3ae+ztM=    1   0    NaN   \n",
       "2  D8nEhsIOBSoE6VthTaqDX8U6lqjJ7dLdr72mOyLya2A=    1   0    NaN   \n",
       "3  mCuD+tZ1hERA/o5GPqk38e041J8ZsBaLcu7nGoIIvhI=    1   0    NaN   \n",
       "4  q4HRBfVSssAFS9iRfxWrohxuk9kCYMKjHOEagUMV6rQ=    1   0    NaN   \n",
       "\n",
       "  registered_via registration_init_time expiration_date  membership_days  \\\n",
       "0              7             2011-08-20      2017-09-20             2223   \n",
       "1              7             2015-06-28      2017-06-22              725   \n",
       "2              4             2016-04-11      2017-07-12              457   \n",
       "3              9             2015-09-06      2015-09-07                1   \n",
       "4              4             2017-01-26      2017-06-13              138   \n",
       "\n",
       "   registration_year  registration_month  registration_day  expiration_year  \\\n",
       "0               2011                   8                20             2017   \n",
       "1               2015                   6                28             2017   \n",
       "2               2016                   4                11             2017   \n",
       "3               2015                   9                 6             2015   \n",
       "4               2017                   1                26             2017   \n",
       "\n",
       "   expiration_month  expiration_day  \n",
       "0                 9              20  \n",
       "1                 6              22  \n",
       "2                 7              12  \n",
       "3                 9               7  \n",
       "4                 6              13  "
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "========== Songs Extra ==========\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>song_id</th>\n",
       "      <th>name</th>\n",
       "      <th>isrc</th>\n",
       "      <th>song_year</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>LP7pLJoJFBvyuUwvu+oLzjT+bI+UeBPURCecJsX1jjs=</td>\n",
       "      <td>我們</td>\n",
       "      <td>TWUM71200043</td>\n",
       "      <td>2012.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>ClazTFnk6r0Bnuie44bocdNMM3rdlrq0bCGAsGUWcHE=</td>\n",
       "      <td>Let Me Love You</td>\n",
       "      <td>QMZSY1600015</td>\n",
       "      <td>2016.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>u2ja/bZE3zhCGxvbbOB3zOoUjx27u40cf5g09UXMoKQ=</td>\n",
       "      <td>原諒我</td>\n",
       "      <td>TWA530887303</td>\n",
       "      <td>2008.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>92Fqsy0+p6+RHe2EoLKjHahORHR1Kq1TBJoClW9v+Ts=</td>\n",
       "      <td>Classic</td>\n",
       "      <td>USSM11301446</td>\n",
       "      <td>2013.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0QFmz/+rJy1Q56C1DuYqT9hKKqi5TUqx0sN0IwvoHrw=</td>\n",
       "      <td>愛投羅網</td>\n",
       "      <td>TWA471306001</td>\n",
       "      <td>2013.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                        song_id             name  \\\n",
       "0  LP7pLJoJFBvyuUwvu+oLzjT+bI+UeBPURCecJsX1jjs=               我們   \n",
       "1  ClazTFnk6r0Bnuie44bocdNMM3rdlrq0bCGAsGUWcHE=  Let Me Love You   \n",
       "2  u2ja/bZE3zhCGxvbbOB3zOoUjx27u40cf5g09UXMoKQ=              原諒我   \n",
       "3  92Fqsy0+p6+RHe2EoLKjHahORHR1Kq1TBJoClW9v+Ts=          Classic   \n",
       "4  0QFmz/+rJy1Q56C1DuYqT9hKKqi5TUqx0sN0IwvoHrw=             愛投羅網   \n",
       "\n",
       "           isrc  song_year  \n",
       "0  TWUM71200043     2012.0  \n",
       "1  QMZSY1600015     2016.0  \n",
       "2  TWA530887303     2008.0  \n",
       "3  USSM11301446     2013.0  \n",
       "4  TWA471306001     2013.0  "
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "========== Train ==========\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>msno</th>\n",
       "      <th>song_id</th>\n",
       "      <th>source_system_tab</th>\n",
       "      <th>source_screen_name</th>\n",
       "      <th>source_type</th>\n",
       "      <th>target</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>FGtllVqz18RPiwJj/edr2gV78zirAiY/9SmYvia+kCg=</td>\n",
       "      <td>BBzumQNXUHKdEBOB7mAJuzok+IJA1c2Ryg/yzTF6tik=</td>\n",
       "      <td>explore</td>\n",
       "      <td>Explore</td>\n",
       "      <td>online-playlist</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=</td>\n",
       "      <td>bhp/MpSNoqoxOIB+/l8WPqu6jldth4DIpCm3ayXnJqM=</td>\n",
       "      <td>my library</td>\n",
       "      <td>Local playlist more</td>\n",
       "      <td>local-playlist</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=</td>\n",
       "      <td>JNWfrrC7zNN7BdMpsISKa4Mw+xVJYNnxXh3/Epw7QgY=</td>\n",
       "      <td>my library</td>\n",
       "      <td>Local playlist more</td>\n",
       "      <td>local-playlist</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=</td>\n",
       "      <td>2A87tzfnJTSWqD7gIZHisolhe4DMdzkbd6LzO1KHjNs=</td>\n",
       "      <td>my library</td>\n",
       "      <td>Local playlist more</td>\n",
       "      <td>local-playlist</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>FGtllVqz18RPiwJj/edr2gV78zirAiY/9SmYvia+kCg=</td>\n",
       "      <td>3qm6XTZ6MOCU11x8FIVbAGH5l5uMkT3/ZalWG1oo2Gc=</td>\n",
       "      <td>explore</td>\n",
       "      <td>Explore</td>\n",
       "      <td>online-playlist</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                           msno  \\\n",
       "0  FGtllVqz18RPiwJj/edr2gV78zirAiY/9SmYvia+kCg=   \n",
       "1  Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=   \n",
       "2  Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=   \n",
       "3  Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=   \n",
       "4  FGtllVqz18RPiwJj/edr2gV78zirAiY/9SmYvia+kCg=   \n",
       "\n",
       "                                        song_id source_system_tab  \\\n",
       "0  BBzumQNXUHKdEBOB7mAJuzok+IJA1c2Ryg/yzTF6tik=           explore   \n",
       "1  bhp/MpSNoqoxOIB+/l8WPqu6jldth4DIpCm3ayXnJqM=        my library   \n",
       "2  JNWfrrC7zNN7BdMpsISKa4Mw+xVJYNnxXh3/Epw7QgY=        my library   \n",
       "3  2A87tzfnJTSWqD7gIZHisolhe4DMdzkbd6LzO1KHjNs=        my library   \n",
       "4  3qm6XTZ6MOCU11x8FIVbAGH5l5uMkT3/ZalWG1oo2Gc=           explore   \n",
       "\n",
       "    source_screen_name      source_type  target  \n",
       "0              Explore  online-playlist       1  \n",
       "1  Local playlist more   local-playlist       1  \n",
       "2  Local playlist more   local-playlist       1  \n",
       "3  Local playlist more   local-playlist       1  \n",
       "4              Explore  online-playlist       1  "
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "========== Test ==========\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>msno</th>\n",
       "      <th>song_id</th>\n",
       "      <th>source_system_tab</th>\n",
       "      <th>source_screen_name</th>\n",
       "      <th>source_type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>V8ruy7SGk7tDm3zA51DPpn6qutt+vmKMBKa21dp54uM=</td>\n",
       "      <td>WmHKgKMlp1lQMecNdNvDMkvIycZYHnFwDT72I5sIssc=</td>\n",
       "      <td>my library</td>\n",
       "      <td>Local playlist more</td>\n",
       "      <td>local-library</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>V8ruy7SGk7tDm3zA51DPpn6qutt+vmKMBKa21dp54uM=</td>\n",
       "      <td>y/rsZ9DC7FwK5F2PK2D5mj+aOBUJAjuu3dZ14NgE0vM=</td>\n",
       "      <td>my library</td>\n",
       "      <td>Local playlist more</td>\n",
       "      <td>local-library</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>/uQAlrAkaczV+nWCd2sPF2ekvXPRipV7q0l+gbLuxjw=</td>\n",
       "      <td>8eZLFOdGVdXBSqoAv5nsLigeH2BvKXzTQYtUM53I0k4=</td>\n",
       "      <td>discover</td>\n",
       "      <td>NaN</td>\n",
       "      <td>song-based-playlist</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>1a6oo/iXKatxQx4eS9zTVD+KlSVaAFbTIqVvwLC1Y0k=</td>\n",
       "      <td>ztCf8thYsS4YN3GcIL/bvoxLm/T5mYBVKOO4C9NiVfQ=</td>\n",
       "      <td>radio</td>\n",
       "      <td>Radio</td>\n",
       "      <td>radio</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>1a6oo/iXKatxQx4eS9zTVD+KlSVaAFbTIqVvwLC1Y0k=</td>\n",
       "      <td>MKVMpslKcQhMaFEgcEQhEfi5+RZhMYlU3eRDpySrH8Y=</td>\n",
       "      <td>radio</td>\n",
       "      <td>Radio</td>\n",
       "      <td>radio</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   id                                          msno  \\\n",
       "0   0  V8ruy7SGk7tDm3zA51DPpn6qutt+vmKMBKa21dp54uM=   \n",
       "1   1  V8ruy7SGk7tDm3zA51DPpn6qutt+vmKMBKa21dp54uM=   \n",
       "2   2  /uQAlrAkaczV+nWCd2sPF2ekvXPRipV7q0l+gbLuxjw=   \n",
       "3   3  1a6oo/iXKatxQx4eS9zTVD+KlSVaAFbTIqVvwLC1Y0k=   \n",
       "4   4  1a6oo/iXKatxQx4eS9zTVD+KlSVaAFbTIqVvwLC1Y0k=   \n",
       "\n",
       "                                        song_id source_system_tab  \\\n",
       "0  WmHKgKMlp1lQMecNdNvDMkvIycZYHnFwDT72I5sIssc=        my library   \n",
       "1  y/rsZ9DC7FwK5F2PK2D5mj+aOBUJAjuu3dZ14NgE0vM=        my library   \n",
       "2  8eZLFOdGVdXBSqoAv5nsLigeH2BvKXzTQYtUM53I0k4=          discover   \n",
       "3  ztCf8thYsS4YN3GcIL/bvoxLm/T5mYBVKOO4C9NiVfQ=             radio   \n",
       "4  MKVMpslKcQhMaFEgcEQhEfi5+RZhMYlU3eRDpySrH8Y=             radio   \n",
       "\n",
       "    source_screen_name          source_type  \n",
       "0  Local playlist more        local-library  \n",
       "1  Local playlist more        local-library  \n",
       "2                  NaN  song-based-playlist  \n",
       "3                Radio                radio  \n",
       "4                Radio                radio  "
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "print(\"=\"*10,\"Songs\",\"=\"*10)\n",
    "songs.head()\n",
    "print(\"=\"*10,\"Members\",\"=\"*10)\n",
    "members.head()\n",
    "print(\"=\"*10,\"Songs Extra\",\"=\"*10)\n",
    "songs_extra.head()\n",
    "print(\"=\"*10,\"Train\",\"=\"*10)\n",
    "train.head()\n",
    "print(\"=\"*10,\"Test\",\"=\"*10)\n",
    "test.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "========== Songs Missing ==========\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "song_id                    0\n",
       "song_length                0\n",
       "genre_ids              94145\n",
       "artist_name                0\n",
       "composer             1071607\n",
       "lyricist             1945727\n",
       "language                   0\n",
       "split_artist_name          0\n",
       "number_of_artists          0\n",
       "split_genre_ids            0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "========== Members Missing ==========\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "msno                          0\n",
       "city                          0\n",
       "bd                            0\n",
       "gender                    19902\n",
       "registered_via                0\n",
       "registration_init_time        0\n",
       "expiration_date               0\n",
       "membership_days               0\n",
       "registration_year             0\n",
       "registration_month            0\n",
       "registration_day              0\n",
       "expiration_year               0\n",
       "expiration_month              0\n",
       "expiration_day                0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "========== Songs Extra Missing ==========\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "song_id           0\n",
       "name              2\n",
       "isrc         136552\n",
       "song_year    136552\n",
       "dtype: int64"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "========== Train Missing ==========\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "msno                       0\n",
       "song_id                    0\n",
       "source_system_tab      24849\n",
       "source_screen_name    414804\n",
       "source_type            21539\n",
       "target                     0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "========== Test Missing ==========\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "id                         0\n",
       "msno                       0\n",
       "song_id                    0\n",
       "source_system_tab       8442\n",
       "source_screen_name    162883\n",
       "source_type             7297\n",
       "dtype: int64"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "print(\"=\"*10,\"Songs Missing\",\"=\"*10)\n",
    "songs.isnull().sum()\n",
    "print(\"=\"*10,\"Members Missing\",\"=\"*10)\n",
    "members.isnull().sum()\n",
    "print(\"=\"*10,\"Songs Extra Missing\",\"=\"*10)\n",
    "songs_extra.isnull().sum()\n",
    "print(\"=\"*10,\"Train Missing\",\"=\"*10)\n",
    "train.isnull().sum()\n",
    "print(\"=\"*10,\"Test Missing\",\"=\"*10)\n",
    "test.isnull().sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Train和Test缺失值采用众数填充\n",
    "\n",
    "**众数就是用该属性在其他所有对象的取值次数最多的值(即出现频率最高的值)来补齐该缺失的属性值**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [],
   "source": [
    "# train\n",
    "train_max_sst = train_source_system_tab_hist.loc[train_source_system_tab_hist['target'].idxmax()].source_system_tab\n",
    "train_max_ssn = train_source_screen_name_hist.loc[train_source_screen_name_hist['target'].idxmax()].source_screen_name\n",
    "train_max_st = train_source_type_hist.loc[train_source_type_hist['target'].idxmax()].source_type\n",
    "# test\n",
    "test_max_sst = test_source_system_tab_hist.loc[test_source_system_tab_hist['id'].idxmax()].source_system_tab\n",
    "test_max_ssn = test_source_screen_name_hist.loc[test_source_screen_name_hist['id'].idxmax()].source_screen_name\n",
    "test_max_st = test_source_type_hist.loc[test_source_type_hist['id'].idxmax()].source_type\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [],
   "source": [
    "train['source_system_tab'] = train['source_system_tab'].fillna(train_max_sst)\n",
    "train['source_screen_name'] = train['source_screen_name'].fillna(train_max_ssn)\n",
    "train['source_type'] = train['source_type'].fillna(train_max_st)\n",
    "\n",
    "test['source_system_tab'] = test['source_system_tab'].fillna(test_max_sst)\n",
    "test['source_screen_name'] = test['source_screen_name'].fillna(test_max_ssn)\n",
    "test['source_type'] = test['source_type'].fillna(test_max_st)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Songs特征缺失值的处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(2296833, 10)"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "songs.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2296833"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(songs['song_id'].unique().tolist())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**songs表没有重复数据**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- genre_ids\n",
    "\n",
    "新增一列genre_id_cnt表示个数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [],
   "source": [
    "genre_id = np.zeros((len(songs), 4))\n",
    "for i in range(len(songs)):\n",
    "    if not isinstance(songs['genre_ids'].values[i], str):\n",
    "        continue\n",
    "    ids = str(songs['genre_ids'].values[i]).split('|')\n",
    "    if len(ids) > 2:\n",
    "        genre_id[i, 0] = int(ids[0])\n",
    "        genre_id[i, 1] = int(ids[1])\n",
    "        genre_id[i, 2] = int(ids[2])\n",
    "    elif len(ids) > 1:\n",
    "        genre_id[i, 0] = int(ids[0])\n",
    "        genre_id[i, 1] = int(ids[1])\n",
    "    elif len(ids) == 1:\n",
    "        genre_id[i, 0] = int(ids[0])\n",
    "    genre_id[i, 3] = len(ids)\n",
    "# 新增3列分别取genre_id的前3个\n",
    "songs['first_genre_id'] = genre_id[:, 0]\n",
    "songs['second_genre_id'] = genre_id[:, 1]\n",
    "songs['third_genre_id'] = genre_id[:, 2]\n",
    "# 新增1列表示个数\n",
    "songs['genre_id_cnt'] = genre_id[:, 3].astype(np.int8)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- artist_name\n",
    "\n",
    "新增一列artist_cnt表示个数，由于原始数据中出现“feat”，经过查找发现，只要有这个标识的表示乐队其他成员助唱，比如：乐队的鼓手、吉他手等，所以再新增一列is_featured表示该歌手是否有乐队其他成员助唱"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [],
   "source": [
    "# artist_name中有feat的代表是否\n",
    "# 统计artist_name中出现：and , feat & | 的数量，这些数量作为artist_name的个数\n",
    "def artist_count(x):\n",
    "    # 将字符串转换成小写\n",
    "    x = x.lower()\n",
    "#     return x.count(' and ') + x.count(',') + x.count(' feat') + x.count('&') + x.count('|') + 1\n",
    "    return sum(map(x.count, [' and ', ',', ' feat', '&', '|'])) + 1\n",
    "\n",
    "songs['artist_cnt'] = songs['artist_name'].apply(artist_count).astype(np.int8)\n",
    "# 新增一列is_featured表示是否有乐队其他成员助唱\n",
    "songs['is_featured'] = songs['artist_name'].apply(lambda x: 1 if ' feat' in str(x) else 0).astype(np.int8)\n",
    "\n",
    "# songs.loc[songs['artist_cnt'].idxmax()]\n",
    "# songs[songs['song_id']=='WQpCuUQOiqnXp/0ZCQzV8FmgPLtxMm8ErEjnNcP4Hws=']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**新增一列表示：只取第一个歌手名字**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_first_artist(x):\n",
    "    # 统一转换成小写方便统计\n",
    "    x = x.lower()\n",
    "    if x.count(' and ') > 0:\n",
    "        x = x.split(' and ')[0]\n",
    "    if x.count(',') > 0:\n",
    "        x = x.split(',')[0]\n",
    "    if x.count(' feat') > 0:\n",
    "        x = x.split(' feat')[0]\n",
    "    if x.count('&') > 0:\n",
    "        x = x.split('&')[0]\n",
    "    return x.strip()\n",
    "\n",
    "songs['first_artist_name'] = songs['artist_name'].apply(get_first_artist)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- composer & lyricist\n",
    "\n",
    "分别新增1列代表只取第一个作曲和作词"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_first_term(x):\n",
    "    try:\n",
    "        if x.count('|') > 0:\n",
    "            x = x.split('|')[0]\n",
    "        if x.count('/') > 0:\n",
    "            x = x.split('/')[0]\n",
    "        if x.count('\\\\') > 0:\n",
    "            x = x.split('\\\\')[0]\n",
    "        if x.count(';') > 0:\n",
    "            x = x.split(';')[0]\n",
    "        return x.strip()\n",
    "    except:\n",
    "        return x\n",
    "\n",
    "songs['first_composer'] = songs['composer'].apply(get_first_term)   \n",
    "songs['first_lyricist'] = songs['lyricist'].apply(get_first_term) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**新增2列代表作词作曲家的个数**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [],
   "source": [
    "def composer_lyricist_count(x):\n",
    "#     return x.count('/') + x.count('\\\\') + x.count(';') + x.count('|') + 1\n",
    "    return sum(map(x.count, ['|', '/', '\\\\', ';'])) + 1\n",
    "\n",
    "songs['composer_cnt'] = songs['composer'].apply(composer_lyricist_count)\n",
    "songs['lyricist_cnt'] = songs['lyricist'].apply(composer_lyricist_count)\n",
    "\n",
    "# 缺失值用0填充\n",
    "songs['composer_cnt'] = songs['composer_cnt'].fillna(0).astype(np.int8)\n",
    "songs['lyricist_cnt'] = songs['lyricist_cnt'].fillna(0).astype(np.int8)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "-  song_length\n",
    "\n",
    "新增一列：表示是否小于平均时长，如果小于平均时长，表示是短音乐，否则表示长音乐"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [],
   "source": [
    "_mean_song_length = np.mean(songs['song_length'])\n",
    "def smaller_song(x):\n",
    "    if x < _mean_song_length:\n",
    "        return 1\n",
    "    return 0\n",
    "\n",
    "songs['is_smaller_song'] = songs['song_length'].apply(smaller_song).astype(np.int8)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>song_id</th>\n",
       "      <th>song_length</th>\n",
       "      <th>genre_ids</th>\n",
       "      <th>artist_name</th>\n",
       "      <th>composer</th>\n",
       "      <th>lyricist</th>\n",
       "      <th>language</th>\n",
       "      <th>split_artist_name</th>\n",
       "      <th>number_of_artists</th>\n",
       "      <th>split_genre_ids</th>\n",
       "      <th>...</th>\n",
       "      <th>third_genre_id</th>\n",
       "      <th>genre_id_cnt</th>\n",
       "      <th>artist_cnt</th>\n",
       "      <th>is_featured</th>\n",
       "      <th>first_artist_name</th>\n",
       "      <th>first_composer</th>\n",
       "      <th>first_lyricist</th>\n",
       "      <th>composer_cnt</th>\n",
       "      <th>lyricist_cnt</th>\n",
       "      <th>is_smaller_song</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>CXoTN1eb7AI+DntdU1vbcwGRV4SCIDxZu+YD8JP8r4E=</td>\n",
       "      <td>247640</td>\n",
       "      <td>465</td>\n",
       "      <td>張信哲 (Jeff Chang)</td>\n",
       "      <td>董貞</td>\n",
       "      <td>何啟弘</td>\n",
       "      <td>3.0</td>\n",
       "      <td>[張信哲 (Jeff Chang)]</td>\n",
       "      <td>1</td>\n",
       "      <td>[465]</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>張信哲 (jeff chang)</td>\n",
       "      <td>董貞</td>\n",
       "      <td>何啟弘</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>o0kFgae9QtnYgRkVPqLJwa05zIhRlUjfF7O1tDw0ZDU=</td>\n",
       "      <td>197328</td>\n",
       "      <td>444</td>\n",
       "      <td>BLACKPINK</td>\n",
       "      <td>TEDDY|  FUTURE BOUNCE|  Bekuh BOOM</td>\n",
       "      <td>TEDDY</td>\n",
       "      <td>31.0</td>\n",
       "      <td>[BLACKPINK]</td>\n",
       "      <td>1</td>\n",
       "      <td>[444]</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>blackpink</td>\n",
       "      <td>TEDDY</td>\n",
       "      <td>TEDDY</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>DwVvVurfpuz+XPuFvucclVQEyPqcpUkHR0ne1RQzPs0=</td>\n",
       "      <td>231781</td>\n",
       "      <td>465</td>\n",
       "      <td>SUPER JUNIOR</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>31.0</td>\n",
       "      <td>[SUPER JUNIOR]</td>\n",
       "      <td>1</td>\n",
       "      <td>[465]</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>super junior</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>dKMBWoZyScdxSkihKG+Vf47nc18N9q4m58+b4e7dSSE=</td>\n",
       "      <td>273554</td>\n",
       "      <td>465</td>\n",
       "      <td>S.H.E</td>\n",
       "      <td>湯小康</td>\n",
       "      <td>徐世珍</td>\n",
       "      <td>3.0</td>\n",
       "      <td>[S.H.E]</td>\n",
       "      <td>1</td>\n",
       "      <td>[465]</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>s.h.e</td>\n",
       "      <td>湯小康</td>\n",
       "      <td>徐世珍</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>W3bqWd3T+VeHFzHAUfARgW9AvVRaF4N5Yzm4Mr6Eo/o=</td>\n",
       "      <td>140329</td>\n",
       "      <td>726</td>\n",
       "      <td>貴族精選</td>\n",
       "      <td>Traditional</td>\n",
       "      <td>Traditional</td>\n",
       "      <td>52.0</td>\n",
       "      <td>[貴族精選]</td>\n",
       "      <td>1</td>\n",
       "      <td>[726]</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>貴族精選</td>\n",
       "      <td>Traditional</td>\n",
       "      <td>Traditional</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 22 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                                        song_id  song_length genre_ids  \\\n",
       "0  CXoTN1eb7AI+DntdU1vbcwGRV4SCIDxZu+YD8JP8r4E=       247640       465   \n",
       "1  o0kFgae9QtnYgRkVPqLJwa05zIhRlUjfF7O1tDw0ZDU=       197328       444   \n",
       "2  DwVvVurfpuz+XPuFvucclVQEyPqcpUkHR0ne1RQzPs0=       231781       465   \n",
       "3  dKMBWoZyScdxSkihKG+Vf47nc18N9q4m58+b4e7dSSE=       273554       465   \n",
       "4  W3bqWd3T+VeHFzHAUfARgW9AvVRaF4N5Yzm4Mr6Eo/o=       140329       726   \n",
       "\n",
       "        artist_name                            composer     lyricist language  \\\n",
       "0  張信哲 (Jeff Chang)                                  董貞          何啟弘      3.0   \n",
       "1         BLACKPINK  TEDDY|  FUTURE BOUNCE|  Bekuh BOOM        TEDDY     31.0   \n",
       "2      SUPER JUNIOR                                 NaN          NaN     31.0   \n",
       "3             S.H.E                                 湯小康          徐世珍      3.0   \n",
       "4              貴族精選                         Traditional  Traditional     52.0   \n",
       "\n",
       "    split_artist_name  number_of_artists split_genre_ids  ...  third_genre_id  \\\n",
       "0  [張信哲 (Jeff Chang)]                  1           [465]  ...             0.0   \n",
       "1         [BLACKPINK]                  1           [444]  ...             0.0   \n",
       "2      [SUPER JUNIOR]                  1           [465]  ...             0.0   \n",
       "3             [S.H.E]                  1           [465]  ...             0.0   \n",
       "4              [貴族精選]                  1           [726]  ...             0.0   \n",
       "\n",
       "   genre_id_cnt  artist_cnt  is_featured  first_artist_name  first_composer  \\\n",
       "0             1           1            0   張信哲 (jeff chang)              董貞   \n",
       "1             1           1            0          blackpink           TEDDY   \n",
       "2             1           1            0       super junior             NaN   \n",
       "3             1           1            0              s.h.e             湯小康   \n",
       "4             1           1            0               貴族精選     Traditional   \n",
       "\n",
       "  first_lyricist composer_cnt lyricist_cnt  is_smaller_song  \n",
       "0            何啟弘            1            1                0  \n",
       "1          TEDDY            3            1                1  \n",
       "2            NaN            0            0                1  \n",
       "3            徐世珍            1            1                0  \n",
       "4    Traditional            1            1                1  \n",
       "\n",
       "[5 rows x 22 columns]"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "songs.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 删除无用的列，inplace=True表示直接覆盖内存数据\n",
    "songs.drop([\n",
    "    'artist_name', 'genre_ids', 'composer', 'lyricist', 'split_artist_name',\n",
    "    'number_of_artists', 'split_genre_ids','first_genre_id',\n",
    "    'second_genre_id','third_genre_id','first_lyricist',\n",
    "    'first_composer'\n",
    "],\n",
    "           axis=1,\n",
    "           inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>song_id</th>\n",
       "      <th>song_length</th>\n",
       "      <th>language</th>\n",
       "      <th>genre_id_cnt</th>\n",
       "      <th>artist_cnt</th>\n",
       "      <th>is_featured</th>\n",
       "      <th>first_artist_name</th>\n",
       "      <th>composer_cnt</th>\n",
       "      <th>lyricist_cnt</th>\n",
       "      <th>is_smaller_song</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>95568</td>\n",
       "      <td>247640</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>張信哲 (jeff chang)</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>341401</td>\n",
       "      <td>197328</td>\n",
       "      <td>31</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>blackpink</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>104696</td>\n",
       "      <td>231781</td>\n",
       "      <td>31</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>super junior</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>271326</td>\n",
       "      <td>273554</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>s.h.e</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>223595</td>\n",
       "      <td>140329</td>\n",
       "      <td>52</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>貴族精選</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   song_id  song_length  language  genre_id_cnt  artist_cnt  is_featured  \\\n",
       "0    95568       247640         3             1           1            0   \n",
       "1   341401       197328        31             1           1            0   \n",
       "2   104696       231781        31             1           1            0   \n",
       "3   271326       273554         3             1           1            0   \n",
       "4   223595       140329        52             1           1            0   \n",
       "\n",
       "  first_artist_name  composer_cnt  lyricist_cnt  is_smaller_song  \n",
       "0  張信哲 (jeff chang)             1             1                0  \n",
       "1         blackpink             3             1                1  \n",
       "2      super junior             0             0                1  \n",
       "3             s.h.e             1             1                0  \n",
       "4              貴族精選             1             1                1  "
      ]
     },
     "execution_count": 100,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "songs.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "song_id              0\n",
       "song_length          0\n",
       "language             0\n",
       "genre_id_cnt         0\n",
       "artist_cnt           0\n",
       "is_featured          0\n",
       "first_artist_name    0\n",
       "composer_cnt         0\n",
       "lyricist_cnt         0\n",
       "is_smaller_song      0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "songs.isnull().sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Members特征缺失值的处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(34403, 14)"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "members.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "34403"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(members['msno'].unique().tolist())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**members表没有重复数据**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 同时对city,bd,gender进行编码：哪个值为空，编码为1，其中city=1表示空，bd=0表示为空，g=nan表示为空\n",
    "def encode_city_bd_gender(m):\n",
    "    c = pd.to_numeric(m['city'], downcast='integer')\n",
    "    b = pd.to_numeric(m['bd'], downcast='integer')\n",
    "    g = m['gender']\n",
    "    x = '000'\n",
    "    try:\n",
    "        if c == 1 and b == 0 and g != g: # 表示同时为空\n",
    "            x = '111'\n",
    "        if c == 1 and b == 0 and g == g:\n",
    "            x = '110'\n",
    "        if c == 1 and b != 0 and g != g:\n",
    "            x = '101'\n",
    "        if c == 1 and b != 0 and g == g:\n",
    "            x = '100'\n",
    "        if c != 1 and b == 0 and g != g:\n",
    "            x = '011'\n",
    "        if c != 1 and b == 0 and g == g:\n",
    "            x = '010'\n",
    "        if c != 1 and b != 0 and g != g:\n",
    "            x = '001'\n",
    "        if c != 1 and b != 0 and g == g:\n",
    "            x = '000'\n",
    "        return x\n",
    "    except:\n",
    "        return x\n",
    "\n",
    "members['city_bd_gender_code'] = members.apply(encode_city_bd_gender, axis=1)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>msno</th>\n",
       "      <th>city</th>\n",
       "      <th>bd</th>\n",
       "      <th>gender</th>\n",
       "      <th>registered_via</th>\n",
       "      <th>registration_init_time</th>\n",
       "      <th>expiration_date</th>\n",
       "      <th>membership_days</th>\n",
       "      <th>registration_year</th>\n",
       "      <th>registration_month</th>\n",
       "      <th>registration_day</th>\n",
       "      <th>expiration_year</th>\n",
       "      <th>expiration_month</th>\n",
       "      <th>expiration_day</th>\n",
       "      <th>city_bd_gender_code</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>XQxgAYj3klVKjR3oxPPXYYFp4soD4TuBghkhMTD4oTw=</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>7</td>\n",
       "      <td>2011-08-20</td>\n",
       "      <td>2017-09-20</td>\n",
       "      <td>2223</td>\n",
       "      <td>2011</td>\n",
       "      <td>8</td>\n",
       "      <td>20</td>\n",
       "      <td>2017</td>\n",
       "      <td>9</td>\n",
       "      <td>20</td>\n",
       "      <td>111</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>UizsfmJb9mV54qE9hCYyU07Va97c0lCRLEQX3ae+ztM=</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>7</td>\n",
       "      <td>2015-06-28</td>\n",
       "      <td>2017-06-22</td>\n",
       "      <td>725</td>\n",
       "      <td>2015</td>\n",
       "      <td>6</td>\n",
       "      <td>28</td>\n",
       "      <td>2017</td>\n",
       "      <td>6</td>\n",
       "      <td>22</td>\n",
       "      <td>111</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>D8nEhsIOBSoE6VthTaqDX8U6lqjJ7dLdr72mOyLya2A=</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>4</td>\n",
       "      <td>2016-04-11</td>\n",
       "      <td>2017-07-12</td>\n",
       "      <td>457</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>11</td>\n",
       "      <td>2017</td>\n",
       "      <td>7</td>\n",
       "      <td>12</td>\n",
       "      <td>111</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>mCuD+tZ1hERA/o5GPqk38e041J8ZsBaLcu7nGoIIvhI=</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>9</td>\n",
       "      <td>2015-09-06</td>\n",
       "      <td>2015-09-07</td>\n",
       "      <td>1</td>\n",
       "      <td>2015</td>\n",
       "      <td>9</td>\n",
       "      <td>6</td>\n",
       "      <td>2015</td>\n",
       "      <td>9</td>\n",
       "      <td>7</td>\n",
       "      <td>111</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>q4HRBfVSssAFS9iRfxWrohxuk9kCYMKjHOEagUMV6rQ=</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>4</td>\n",
       "      <td>2017-01-26</td>\n",
       "      <td>2017-06-13</td>\n",
       "      <td>138</td>\n",
       "      <td>2017</td>\n",
       "      <td>1</td>\n",
       "      <td>26</td>\n",
       "      <td>2017</td>\n",
       "      <td>6</td>\n",
       "      <td>13</td>\n",
       "      <td>111</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                           msno city  bd gender  \\\n",
       "0  XQxgAYj3klVKjR3oxPPXYYFp4soD4TuBghkhMTD4oTw=    1   0    NaN   \n",
       "1  UizsfmJb9mV54qE9hCYyU07Va97c0lCRLEQX3ae+ztM=    1   0    NaN   \n",
       "2  D8nEhsIOBSoE6VthTaqDX8U6lqjJ7dLdr72mOyLya2A=    1   0    NaN   \n",
       "3  mCuD+tZ1hERA/o5GPqk38e041J8ZsBaLcu7nGoIIvhI=    1   0    NaN   \n",
       "4  q4HRBfVSssAFS9iRfxWrohxuk9kCYMKjHOEagUMV6rQ=    1   0    NaN   \n",
       "\n",
       "  registered_via registration_init_time expiration_date  membership_days  \\\n",
       "0              7             2011-08-20      2017-09-20             2223   \n",
       "1              7             2015-06-28      2017-06-22              725   \n",
       "2              4             2016-04-11      2017-07-12              457   \n",
       "3              9             2015-09-06      2015-09-07                1   \n",
       "4              4             2017-01-26      2017-06-13              138   \n",
       "\n",
       "   registration_year  registration_month  registration_day  expiration_year  \\\n",
       "0               2011                   8                20             2017   \n",
       "1               2015                   6                28             2017   \n",
       "2               2016                   4                11             2017   \n",
       "3               2015                   9                 6             2015   \n",
       "4               2017                   1                26             2017   \n",
       "\n",
       "   expiration_month  expiration_day city_bd_gender_code  \n",
       "0                 9              20                 111  \n",
       "1                 6              22                 111  \n",
       "2                 7              12                 111  \n",
       "3                 9               7                 111  \n",
       "4                 6              13                 111  "
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "members.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- bd\n",
    "\n",
    "bd<=0的和bd>100的用中位数或者平均值填补"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [],
   "source": [
    "group_gender = members.groupby(['gender'],as_index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 中位数\n",
    "members_median_gender = group_gender[['bd']].median()\n",
    "# 平均数\n",
    "members_mean_gender = group_gender[['bd']].mean()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>gender</th>\n",
       "      <th>bd</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>female</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>male</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   gender  bd\n",
       "0  female  27\n",
       "1    male  27"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>gender</th>\n",
       "      <th>bd</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>female</td>\n",
       "      <td>28.016629</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>male</td>\n",
       "      <td>28.214990</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   gender         bd\n",
       "0  female  28.016629\n",
       "1    male  28.214990"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "members_median_gender\n",
    "members_mean_gender"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**中位数和平均值都差不多，不过中位数不受噪声影响，所以采用中位数填补**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [],
   "source": [
    "def bd_fix(m):\n",
    "    b = pd.to_numeric(m['bd'], downcast='integer')\n",
    "    x = b\n",
    "    try:\n",
    "        if b <= 0 or b > 100: \n",
    "            x = members_median_gender['bd'][0]\n",
    "        return x\n",
    "    except:\n",
    "        return x\n",
    "members['bd_fix'] = members.apply(bd_fix, axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>msno</th>\n",
       "      <th>city</th>\n",
       "      <th>bd</th>\n",
       "      <th>gender</th>\n",
       "      <th>registered_via</th>\n",
       "      <th>registration_init_time</th>\n",
       "      <th>expiration_date</th>\n",
       "      <th>membership_days</th>\n",
       "      <th>registration_year</th>\n",
       "      <th>registration_month</th>\n",
       "      <th>registration_day</th>\n",
       "      <th>expiration_year</th>\n",
       "      <th>expiration_month</th>\n",
       "      <th>expiration_day</th>\n",
       "      <th>city_bd_gender_code</th>\n",
       "      <th>bd_fix</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>XQxgAYj3klVKjR3oxPPXYYFp4soD4TuBghkhMTD4oTw=</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>7</td>\n",
       "      <td>2011-08-20</td>\n",
       "      <td>2017-09-20</td>\n",
       "      <td>2223</td>\n",
       "      <td>2011</td>\n",
       "      <td>8</td>\n",
       "      <td>20</td>\n",
       "      <td>2017</td>\n",
       "      <td>9</td>\n",
       "      <td>20</td>\n",
       "      <td>111</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>UizsfmJb9mV54qE9hCYyU07Va97c0lCRLEQX3ae+ztM=</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>7</td>\n",
       "      <td>2015-06-28</td>\n",
       "      <td>2017-06-22</td>\n",
       "      <td>725</td>\n",
       "      <td>2015</td>\n",
       "      <td>6</td>\n",
       "      <td>28</td>\n",
       "      <td>2017</td>\n",
       "      <td>6</td>\n",
       "      <td>22</td>\n",
       "      <td>111</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>D8nEhsIOBSoE6VthTaqDX8U6lqjJ7dLdr72mOyLya2A=</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>4</td>\n",
       "      <td>2016-04-11</td>\n",
       "      <td>2017-07-12</td>\n",
       "      <td>457</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>11</td>\n",
       "      <td>2017</td>\n",
       "      <td>7</td>\n",
       "      <td>12</td>\n",
       "      <td>111</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>mCuD+tZ1hERA/o5GPqk38e041J8ZsBaLcu7nGoIIvhI=</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>9</td>\n",
       "      <td>2015-09-06</td>\n",
       "      <td>2015-09-07</td>\n",
       "      <td>1</td>\n",
       "      <td>2015</td>\n",
       "      <td>9</td>\n",
       "      <td>6</td>\n",
       "      <td>2015</td>\n",
       "      <td>9</td>\n",
       "      <td>7</td>\n",
       "      <td>111</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>q4HRBfVSssAFS9iRfxWrohxuk9kCYMKjHOEagUMV6rQ=</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>4</td>\n",
       "      <td>2017-01-26</td>\n",
       "      <td>2017-06-13</td>\n",
       "      <td>138</td>\n",
       "      <td>2017</td>\n",
       "      <td>1</td>\n",
       "      <td>26</td>\n",
       "      <td>2017</td>\n",
       "      <td>6</td>\n",
       "      <td>13</td>\n",
       "      <td>111</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                           msno city  bd gender  \\\n",
       "0  XQxgAYj3klVKjR3oxPPXYYFp4soD4TuBghkhMTD4oTw=    1   0    NaN   \n",
       "1  UizsfmJb9mV54qE9hCYyU07Va97c0lCRLEQX3ae+ztM=    1   0    NaN   \n",
       "2  D8nEhsIOBSoE6VthTaqDX8U6lqjJ7dLdr72mOyLya2A=    1   0    NaN   \n",
       "3  mCuD+tZ1hERA/o5GPqk38e041J8ZsBaLcu7nGoIIvhI=    1   0    NaN   \n",
       "4  q4HRBfVSssAFS9iRfxWrohxuk9kCYMKjHOEagUMV6rQ=    1   0    NaN   \n",
       "\n",
       "  registered_via registration_init_time expiration_date  membership_days  \\\n",
       "0              7             2011-08-20      2017-09-20             2223   \n",
       "1              7             2015-06-28      2017-06-22              725   \n",
       "2              4             2016-04-11      2017-07-12              457   \n",
       "3              9             2015-09-06      2015-09-07                1   \n",
       "4              4             2017-01-26      2017-06-13              138   \n",
       "\n",
       "   registration_year  registration_month  registration_day  expiration_year  \\\n",
       "0               2011                   8                20             2017   \n",
       "1               2015                   6                28             2017   \n",
       "2               2016                   4                11             2017   \n",
       "3               2015                   9                 6             2015   \n",
       "4               2017                   1                26             2017   \n",
       "\n",
       "   expiration_month  expiration_day city_bd_gender_code  bd_fix  \n",
       "0                 9              20                 111      27  \n",
       "1                 6              22                 111      27  \n",
       "2                 7              12                 111      27  \n",
       "3                 9               7                 111      27  \n",
       "4                 6              13                 111      27  "
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "members.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [],
   "source": [
    "# group_city = members.groupby(['city'],as_index=False).count()\n",
    "# # 查找city的中位数\n",
    "# group_city_median = group_city[['msno']].median()\n",
    "# group_city[group_city['msno']==group_city_median.get('msno')]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- gender\n",
    "\n",
    "缺失值采用随机50%填补男性，另外50%填补女性"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>msno</th>\n",
       "      <th>city</th>\n",
       "      <th>bd</th>\n",
       "      <th>gender</th>\n",
       "      <th>registered_via</th>\n",
       "      <th>registration_init_time</th>\n",
       "      <th>expiration_date</th>\n",
       "      <th>membership_days</th>\n",
       "      <th>registration_year</th>\n",
       "      <th>registration_month</th>\n",
       "      <th>registration_day</th>\n",
       "      <th>expiration_year</th>\n",
       "      <th>expiration_month</th>\n",
       "      <th>expiration_day</th>\n",
       "      <th>city_bd_gender_code</th>\n",
       "      <th>bd_fix</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>XQxgAYj3klVKjR3oxPPXYYFp4soD4TuBghkhMTD4oTw=</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>male</td>\n",
       "      <td>7</td>\n",
       "      <td>2011-08-20</td>\n",
       "      <td>2017-09-20</td>\n",
       "      <td>2223</td>\n",
       "      <td>2011</td>\n",
       "      <td>8</td>\n",
       "      <td>20</td>\n",
       "      <td>2017</td>\n",
       "      <td>9</td>\n",
       "      <td>20</td>\n",
       "      <td>111</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>UizsfmJb9mV54qE9hCYyU07Va97c0lCRLEQX3ae+ztM=</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>male</td>\n",
       "      <td>7</td>\n",
       "      <td>2015-06-28</td>\n",
       "      <td>2017-06-22</td>\n",
       "      <td>725</td>\n",
       "      <td>2015</td>\n",
       "      <td>6</td>\n",
       "      <td>28</td>\n",
       "      <td>2017</td>\n",
       "      <td>6</td>\n",
       "      <td>22</td>\n",
       "      <td>111</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>D8nEhsIOBSoE6VthTaqDX8U6lqjJ7dLdr72mOyLya2A=</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>male</td>\n",
       "      <td>4</td>\n",
       "      <td>2016-04-11</td>\n",
       "      <td>2017-07-12</td>\n",
       "      <td>457</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>11</td>\n",
       "      <td>2017</td>\n",
       "      <td>7</td>\n",
       "      <td>12</td>\n",
       "      <td>111</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>mCuD+tZ1hERA/o5GPqk38e041J8ZsBaLcu7nGoIIvhI=</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>female</td>\n",
       "      <td>9</td>\n",
       "      <td>2015-09-06</td>\n",
       "      <td>2015-09-07</td>\n",
       "      <td>1</td>\n",
       "      <td>2015</td>\n",
       "      <td>9</td>\n",
       "      <td>6</td>\n",
       "      <td>2015</td>\n",
       "      <td>9</td>\n",
       "      <td>7</td>\n",
       "      <td>111</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>q4HRBfVSssAFS9iRfxWrohxuk9kCYMKjHOEagUMV6rQ=</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>female</td>\n",
       "      <td>4</td>\n",
       "      <td>2017-01-26</td>\n",
       "      <td>2017-06-13</td>\n",
       "      <td>138</td>\n",
       "      <td>2017</td>\n",
       "      <td>1</td>\n",
       "      <td>26</td>\n",
       "      <td>2017</td>\n",
       "      <td>6</td>\n",
       "      <td>13</td>\n",
       "      <td>111</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                           msno city  bd  gender  \\\n",
       "0  XQxgAYj3klVKjR3oxPPXYYFp4soD4TuBghkhMTD4oTw=    1   0    male   \n",
       "1  UizsfmJb9mV54qE9hCYyU07Va97c0lCRLEQX3ae+ztM=    1   0    male   \n",
       "2  D8nEhsIOBSoE6VthTaqDX8U6lqjJ7dLdr72mOyLya2A=    1   0    male   \n",
       "3  mCuD+tZ1hERA/o5GPqk38e041J8ZsBaLcu7nGoIIvhI=    1   0  female   \n",
       "4  q4HRBfVSssAFS9iRfxWrohxuk9kCYMKjHOEagUMV6rQ=    1   0  female   \n",
       "\n",
       "  registered_via registration_init_time expiration_date  membership_days  \\\n",
       "0              7             2011-08-20      2017-09-20             2223   \n",
       "1              7             2015-06-28      2017-06-22              725   \n",
       "2              4             2016-04-11      2017-07-12              457   \n",
       "3              9             2015-09-06      2015-09-07                1   \n",
       "4              4             2017-01-26      2017-06-13              138   \n",
       "\n",
       "   registration_year  registration_month  registration_day  expiration_year  \\\n",
       "0               2011                   8                20             2017   \n",
       "1               2015                   6                28             2017   \n",
       "2               2016                   4                11             2017   \n",
       "3               2015                   9                 6             2015   \n",
       "4               2017                   1                26             2017   \n",
       "\n",
       "   expiration_month  expiration_day city_bd_gender_code  bd_fix  \n",
       "0                 9              20                 111      27  \n",
       "1                 6              22                 111      27  \n",
       "2                 7              12                 111      27  \n",
       "3                 9               7                 111      27  \n",
       "4                 6              13                 111      27  "
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 随机50%的缺失值，设置为male\n",
    "members.loc[\n",
    "    members.query('gender.isnull()').sample(frac=.5).index,\n",
    "    'gender'\n",
    "] = 'male'\n",
    "# 剩下的缺失值全填补为female\n",
    "members.loc[\n",
    "    members.query('gender.isnull()').index,\n",
    "    'gender'\n",
    "] = 'female'\n",
    "\n",
    "members.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>msno</th>\n",
       "      <th>city</th>\n",
       "      <th>gender</th>\n",
       "      <th>registered_via</th>\n",
       "      <th>membership_days</th>\n",
       "      <th>registration_year</th>\n",
       "      <th>registration_month</th>\n",
       "      <th>registration_day</th>\n",
       "      <th>expiration_year</th>\n",
       "      <th>expiration_month</th>\n",
       "      <th>expiration_day</th>\n",
       "      <th>city_bd_gender_code</th>\n",
       "      <th>bd_fix</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>XQxgAYj3klVKjR3oxPPXYYFp4soD4TuBghkhMTD4oTw=</td>\n",
       "      <td>1</td>\n",
       "      <td>male</td>\n",
       "      <td>7</td>\n",
       "      <td>2223</td>\n",
       "      <td>2011</td>\n",
       "      <td>8</td>\n",
       "      <td>20</td>\n",
       "      <td>2017</td>\n",
       "      <td>9</td>\n",
       "      <td>20</td>\n",
       "      <td>111</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>UizsfmJb9mV54qE9hCYyU07Va97c0lCRLEQX3ae+ztM=</td>\n",
       "      <td>1</td>\n",
       "      <td>male</td>\n",
       "      <td>7</td>\n",
       "      <td>725</td>\n",
       "      <td>2015</td>\n",
       "      <td>6</td>\n",
       "      <td>28</td>\n",
       "      <td>2017</td>\n",
       "      <td>6</td>\n",
       "      <td>22</td>\n",
       "      <td>111</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>D8nEhsIOBSoE6VthTaqDX8U6lqjJ7dLdr72mOyLya2A=</td>\n",
       "      <td>1</td>\n",
       "      <td>male</td>\n",
       "      <td>4</td>\n",
       "      <td>457</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>11</td>\n",
       "      <td>2017</td>\n",
       "      <td>7</td>\n",
       "      <td>12</td>\n",
       "      <td>111</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>mCuD+tZ1hERA/o5GPqk38e041J8ZsBaLcu7nGoIIvhI=</td>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>9</td>\n",
       "      <td>1</td>\n",
       "      <td>2015</td>\n",
       "      <td>9</td>\n",
       "      <td>6</td>\n",
       "      <td>2015</td>\n",
       "      <td>9</td>\n",
       "      <td>7</td>\n",
       "      <td>111</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>q4HRBfVSssAFS9iRfxWrohxuk9kCYMKjHOEagUMV6rQ=</td>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>4</td>\n",
       "      <td>138</td>\n",
       "      <td>2017</td>\n",
       "      <td>1</td>\n",
       "      <td>26</td>\n",
       "      <td>2017</td>\n",
       "      <td>6</td>\n",
       "      <td>13</td>\n",
       "      <td>111</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                           msno city  gender registered_via  \\\n",
       "0  XQxgAYj3klVKjR3oxPPXYYFp4soD4TuBghkhMTD4oTw=    1    male              7   \n",
       "1  UizsfmJb9mV54qE9hCYyU07Va97c0lCRLEQX3ae+ztM=    1    male              7   \n",
       "2  D8nEhsIOBSoE6VthTaqDX8U6lqjJ7dLdr72mOyLya2A=    1    male              4   \n",
       "3  mCuD+tZ1hERA/o5GPqk38e041J8ZsBaLcu7nGoIIvhI=    1  female              9   \n",
       "4  q4HRBfVSssAFS9iRfxWrohxuk9kCYMKjHOEagUMV6rQ=    1  female              4   \n",
       "\n",
       "   membership_days  registration_year  registration_month  registration_day  \\\n",
       "0             2223               2011                   8                20   \n",
       "1              725               2015                   6                28   \n",
       "2              457               2016                   4                11   \n",
       "3                1               2015                   9                 6   \n",
       "4              138               2017                   1                26   \n",
       "\n",
       "   expiration_year  expiration_month  expiration_day city_bd_gender_code  \\\n",
       "0             2017                 9              20                 111   \n",
       "1             2017                 6              22                 111   \n",
       "2             2017                 7              12                 111   \n",
       "3             2015                 9               7                 111   \n",
       "4             2017                 6              13                 111   \n",
       "\n",
       "   bd_fix  \n",
       "0      27  \n",
       "1      27  \n",
       "2      27  \n",
       "3      27  \n",
       "4      27  "
      ]
     },
     "execution_count": 71,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 删除无用的列，inplace=True表示直接覆盖内存数据\n",
    "members.drop([\n",
    "    'bd', 'registration_init_time', 'expiration_date'\n",
    "],\n",
    "           axis=1,\n",
    "           inplace=True)\n",
    "members.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "msno                   0\n",
       "city                   0\n",
       "gender                 0\n",
       "registered_via         0\n",
       "membership_days        0\n",
       "registration_year      0\n",
       "registration_month     0\n",
       "registration_day       0\n",
       "expiration_year        0\n",
       "expiration_month       0\n",
       "expiration_day         0\n",
       "city_bd_gender_code    0\n",
       "bd_fix                 0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "members.isnull().sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Song Extra Info特征缺失值的处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>song_id</th>\n",
       "      <th>name</th>\n",
       "      <th>isrc</th>\n",
       "      <th>song_year</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>LP7pLJoJFBvyuUwvu+oLzjT+bI+UeBPURCecJsX1jjs=</td>\n",
       "      <td>我們</td>\n",
       "      <td>TWUM71200043</td>\n",
       "      <td>2012.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>ClazTFnk6r0Bnuie44bocdNMM3rdlrq0bCGAsGUWcHE=</td>\n",
       "      <td>Let Me Love You</td>\n",
       "      <td>QMZSY1600015</td>\n",
       "      <td>2016.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>u2ja/bZE3zhCGxvbbOB3zOoUjx27u40cf5g09UXMoKQ=</td>\n",
       "      <td>原諒我</td>\n",
       "      <td>TWA530887303</td>\n",
       "      <td>2008.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>92Fqsy0+p6+RHe2EoLKjHahORHR1Kq1TBJoClW9v+Ts=</td>\n",
       "      <td>Classic</td>\n",
       "      <td>USSM11301446</td>\n",
       "      <td>2013.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0QFmz/+rJy1Q56C1DuYqT9hKKqi5TUqx0sN0IwvoHrw=</td>\n",
       "      <td>愛投羅網</td>\n",
       "      <td>TWA471306001</td>\n",
       "      <td>2013.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                        song_id             name  \\\n",
       "0  LP7pLJoJFBvyuUwvu+oLzjT+bI+UeBPURCecJsX1jjs=               我們   \n",
       "1  ClazTFnk6r0Bnuie44bocdNMM3rdlrq0bCGAsGUWcHE=  Let Me Love You   \n",
       "2  u2ja/bZE3zhCGxvbbOB3zOoUjx27u40cf5g09UXMoKQ=              原諒我   \n",
       "3  92Fqsy0+p6+RHe2EoLKjHahORHR1Kq1TBJoClW9v+Ts=          Classic   \n",
       "4  0QFmz/+rJy1Q56C1DuYqT9hKKqi5TUqx0sN0IwvoHrw=             愛投羅網   \n",
       "\n",
       "           isrc  song_year  \n",
       "0  TWUM71200043     2012.0  \n",
       "1  QMZSY1600015     2016.0  \n",
       "2  TWA530887303     2008.0  \n",
       "3  USSM11301446     2013.0  \n",
       "4  TWA471306001     2013.0  "
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "songs_extra.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "song_id           0\n",
       "name              2\n",
       "isrc         136552\n",
       "song_year    136552\n",
       "dtype: int64"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "songs_extra.isnull().sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- name\n",
    "\n",
    "name的缺失值用unknown填补"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [],
   "source": [
    "songs_extra['name'] = songs_extra['name'].fillna('unknown')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- isrc\n",
    "\n",
    "song_year用0填补"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [],
   "source": [
    "songs_extra['song_year'] = songs_extra['song_year'].fillna(0.0).apply(np.int64)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>song_id</th>\n",
       "      <th>name</th>\n",
       "      <th>song_year</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>LP7pLJoJFBvyuUwvu+oLzjT+bI+UeBPURCecJsX1jjs=</td>\n",
       "      <td>我們</td>\n",
       "      <td>2012</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>ClazTFnk6r0Bnuie44bocdNMM3rdlrq0bCGAsGUWcHE=</td>\n",
       "      <td>Let Me Love You</td>\n",
       "      <td>2016</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>u2ja/bZE3zhCGxvbbOB3zOoUjx27u40cf5g09UXMoKQ=</td>\n",
       "      <td>原諒我</td>\n",
       "      <td>2008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>92Fqsy0+p6+RHe2EoLKjHahORHR1Kq1TBJoClW9v+Ts=</td>\n",
       "      <td>Classic</td>\n",
       "      <td>2013</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0QFmz/+rJy1Q56C1DuYqT9hKKqi5TUqx0sN0IwvoHrw=</td>\n",
       "      <td>愛投羅網</td>\n",
       "      <td>2013</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                        song_id             name  song_year\n",
       "0  LP7pLJoJFBvyuUwvu+oLzjT+bI+UeBPURCecJsX1jjs=               我們       2012\n",
       "1  ClazTFnk6r0Bnuie44bocdNMM3rdlrq0bCGAsGUWcHE=  Let Me Love You       2016\n",
       "2  u2ja/bZE3zhCGxvbbOB3zOoUjx27u40cf5g09UXMoKQ=              原諒我       2008\n",
       "3  92Fqsy0+p6+RHe2EoLKjHahORHR1Kq1TBJoClW9v+Ts=          Classic       2013\n",
       "4  0QFmz/+rJy1Q56C1DuYqT9hKKqi5TUqx0sN0IwvoHrw=             愛投羅網       2013"
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 删除无用的列，inplace=True表示直接覆盖内存数据\n",
    "songs_extra.drop(['isrc'],\n",
    "           axis=1,\n",
    "           inplace=True)\n",
    "songs_extra.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## LabelEncoder编码"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import LabelEncoder"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>song_id</th>\n",
       "      <th>song_length</th>\n",
       "      <th>language</th>\n",
       "      <th>genre_id_cnt</th>\n",
       "      <th>artist_cnt</th>\n",
       "      <th>is_featured</th>\n",
       "      <th>first_artist_name</th>\n",
       "      <th>composer_cnt</th>\n",
       "      <th>lyricist_cnt</th>\n",
       "      <th>is_smaller_song</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>CXoTN1eb7AI+DntdU1vbcwGRV4SCIDxZu+YD8JP8r4E=</td>\n",
       "      <td>247640</td>\n",
       "      <td>3.0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>張信哲 (jeff chang)</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>o0kFgae9QtnYgRkVPqLJwa05zIhRlUjfF7O1tDw0ZDU=</td>\n",
       "      <td>197328</td>\n",
       "      <td>31.0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>blackpink</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>DwVvVurfpuz+XPuFvucclVQEyPqcpUkHR0ne1RQzPs0=</td>\n",
       "      <td>231781</td>\n",
       "      <td>31.0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>super junior</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>dKMBWoZyScdxSkihKG+Vf47nc18N9q4m58+b4e7dSSE=</td>\n",
       "      <td>273554</td>\n",
       "      <td>3.0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>s.h.e</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>W3bqWd3T+VeHFzHAUfARgW9AvVRaF4N5Yzm4Mr6Eo/o=</td>\n",
       "      <td>140329</td>\n",
       "      <td>52.0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>貴族精選</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                        song_id  song_length language  \\\n",
       "0  CXoTN1eb7AI+DntdU1vbcwGRV4SCIDxZu+YD8JP8r4E=       247640      3.0   \n",
       "1  o0kFgae9QtnYgRkVPqLJwa05zIhRlUjfF7O1tDw0ZDU=       197328     31.0   \n",
       "2  DwVvVurfpuz+XPuFvucclVQEyPqcpUkHR0ne1RQzPs0=       231781     31.0   \n",
       "3  dKMBWoZyScdxSkihKG+Vf47nc18N9q4m58+b4e7dSSE=       273554      3.0   \n",
       "4  W3bqWd3T+VeHFzHAUfARgW9AvVRaF4N5Yzm4Mr6Eo/o=       140329     52.0   \n",
       "\n",
       "   genre_id_cnt  artist_cnt  is_featured first_artist_name  composer_cnt  \\\n",
       "0             1           1            0  張信哲 (jeff chang)             1   \n",
       "1             1           1            0         blackpink             3   \n",
       "2             1           1            0      super junior             0   \n",
       "3             1           1            0             s.h.e             1   \n",
       "4             1           1            0              貴族精選             1   \n",
       "\n",
       "   lyricist_cnt  is_smaller_song  \n",
       "0             1                0  \n",
       "1             1                1  \n",
       "2             0                1  \n",
       "3             1                0  \n",
       "4             1                1  "
      ]
     },
     "execution_count": 88,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 1.寻找train和test中不重复的song_id\n",
    "song_id_set = set(train['song_id'].append(test['song_id']))\n",
    "\n",
    "# 2.只保留在train和test中都存在的songs，过滤不在train和test集中的歌曲\n",
    "songs['appeared'] = songs['song_id'].apply(lambda x: True if x in song_id_set else False)\n",
    "songs = songs[songs.appeared]\n",
    "songs.drop('appeared', axis=1, inplace=True)\n",
    "songs.head()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(419835, 10)"
      ]
     },
     "execution_count": 89,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 总共有多少首歌存在于train和test中\n",
    "songs.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(419666, 3)"
      ]
     },
     "execution_count": 90,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 3.同理，过滤songs_extra\n",
    "songs_extra['appeared'] = songs_extra['song_id'].apply(lambda x: True if x in song_id_set else False)\n",
    "songs_extra = songs_extra[songs_extra.appeared]\n",
    "songs_extra.drop('appeared', axis=1, inplace=True)\n",
    "songs_extra.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 4.寻找train和test中不重复的msno\n",
    "msno_set = set(train['msno'].append(test['msno']))\n",
    "\n",
    "# 5.只保留在train和test中都存在的members，过滤不在train和test集中的members\n",
    "members['appeared'] = members['msno'].apply(lambda x: True if x in msno_set else False)\n",
    "members = members[members.appeared]\n",
    "members.drop('appeared', axis=1, inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LabelEncoder()"
      ]
     },
     "execution_count": 92,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 6.对msno预处理：LabelEncoder\n",
    "msno_encoder = LabelEncoder()\n",
    "msno_encoder.fit(members['msno'].values)\n",
    "members['msno'] = msno_encoder.transform(members['msno'])\n",
    "train['msno'] = msno_encoder.transform(train['msno'])\n",
    "test['msno'] = msno_encoder.transform(test['msno'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LabelEncoder()"
      ]
     },
     "execution_count": 93,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 7.对song_id预处理：LabelEncoder\n",
    "song_id_encoder = LabelEncoder()\n",
    "song_id_encoder.fit(train['song_id'].append(test['song_id']))\n",
    "songs['song_id'] = song_id_encoder.transform(songs['song_id'])\n",
    "songs_extra['song_id'] = song_id_encoder.transform(songs_extra['song_id'])\n",
    "train['song_id'] = song_id_encoder.transform(train['song_id'])\n",
    "test['song_id'] = song_id_encoder.transform(test['song_id'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LabelEncoder()"
      ]
     },
     "execution_count": 94,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "LabelEncoder()"
      ]
     },
     "execution_count": 94,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "LabelEncoder()"
      ]
     },
     "execution_count": 94,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 8.对train和test的'source_system_tab', 'source_screen_name', 'source_type'预处理：LabelEncoder\n",
    "columns = ['source_system_tab', 'source_screen_name', 'source_type']\n",
    "for column in columns:\n",
    "    column_encoder = LabelEncoder()\n",
    "    column_encoder.fit(train[column].append(test[column]))\n",
    "    train[column] = column_encoder.transform(train[column])\n",
    "    test[column] = column_encoder.transform(test[column])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LabelEncoder()"
      ]
     },
     "execution_count": 95,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "LabelEncoder()"
      ]
     },
     "execution_count": 95,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "LabelEncoder()"
      ]
     },
     "execution_count": 95,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 9.对members的'city', 'gender', 'registered_via'预处理：LabelEncoder\n",
    "columns = ['city', 'gender', 'registered_via']\n",
    "for column in columns:\n",
    "    column_encoder = LabelEncoder()\n",
    "    column_encoder.fit(members[column])\n",
    "    members[column] = column_encoder.transform(members[column])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LabelEncoder()"
      ]
     },
     "execution_count": 101,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "LabelEncoder()"
      ]
     },
     "execution_count": 101,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 10.对songs的'first_artist_name', 'language'预处理：LabelEncoder\n",
    "columns = ['first_artist_name', 'language']\n",
    "for column in columns:\n",
    "    column_encoder = LabelEncoder()\n",
    "    column_encoder.fit(songs[column])\n",
    "    songs[column] = column_encoder.transform(songs[column])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 保存文件"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "metadata": {},
   "outputs": [],
   "source": [
    "## save files\n",
    "members.to_csv(dpath + 'LGBM_data/members_fe.csv', index=False)\n",
    "songs.to_csv(dpath + 'LGBM_data/songs_fe.csv', index=False)\n",
    "songs_extra.to_csv(dpath + 'LGBM_data/songs_extra_fe.csv', index=False)\n",
    "train.to_csv(dpath + 'LGBM_data/train_fe.csv', index=False)\n",
    "test.to_csv(dpath + 'LGBM_data/test_fe.csv', index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
